如何使用 c# 将 TapGestureRecognizer 添加到从 JSON 创建的项目中?
Posted
技术标签:
【中文标题】如何使用 c# 将 TapGestureRecognizer 添加到从 JSON 创建的项目中?【英文标题】:How to add a TapGestureRecognizer with c# to created items from JSON? 【发布时间】:2019-10-16 18:55:29 【问题描述】:所以我试图反序列化一个 JSON 文件并从中创建一些项目,到目前为止一切正常。我的问题是我想为每个创建的项目添加一个 TapGestureRecognizer,但我不知道该怎么做。
List<Categories> categorie = JsonConvert.DeserializeObject<List<Categories>>(categoriejson);
Device.BeginInvokeOnMainThread(() =>
foreach (Categories c in categorie)
Image image = new Image
Source = ImageSource.FromUri(new Uri(c.imageUrl))
;
image.HeightRequest = 105;
CategorieLayout.Children.Add(image);
所以我只想为每个创建的图像添加一个点击手势。我正在考虑检查默认为每个图像提供的 x:name,但我没有这样做......任何想法都将不胜感激。
【问题讨论】:
当图像被点击时你想做什么? 我将反序列化另一个 json 文件 【参考方案1】:这样的东西应该可以工作 - 我是凭记忆做的,所以语法可能不完美
Image image = new Image
Source = ImageSource.FromUri(new Uri(c.imageUrl))
;
var tap = new TappedGestureRecognizer();
tap.Tapped += TappedHandler;
image.GestureRecognizers.Add(tap);
【讨论】:
好的,太好了!但是当点击图片时我应该把我的动作放在哪里? 在TappedHandler
【参考方案2】:
如果你想反序列化一个 JSON 文件并从中创建一些项目,我建议你使用ScrollView
来包装内容。很可能一页不会完全显示,需要滚动。你可以这样做:
public TestPage1()
StackLayout stackLayout = new StackLayout;
ScrollView scroll = new ScrollView();
scroll.Content = stackLayout;
foreach (Categories c in categorie)
var image = new Image
Source = ImageSource.FromUri(new Uri(c.imageUrl))
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
;
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += Image_OnTapped;
image.ClassId = c.imageUrl;//attach data to image's `ClassId`
image.GestureRecognizers.Add(tapGestureRecognizer);
stackLayout.Children.Add(image);
Content = scroll;
方法Image_OnTapped
private void Image_OnTapped(object sender, EventArgs e)
// retrieve parameter from sender's ClassId
var parm = ((Image)sender).ClassId;
注意:
Tapped 事件的发送者将是手势识别器附加到的控件。在你的情况下,一个图像。您可以将数据附加到 Image 的属性之一,以便从事件处理程序中访问它。
image.ClassId = c.imageUrl;//attach data to image's `ClassId`
并像这样从方法Image_OnTapped
中获取值:
var parm = ((Image)sender).ClassId;
【讨论】:
是否可以知道点击了哪张图片?这样我就可以将每个人与不同的动作联系起来?在 XAML 中我曾经使用 x:name以上是关于如何使用 c# 将 TapGestureRecognizer 添加到从 JSON 创建的项目中?的主要内容,如果未能解决你的问题,请参考以下文章