如何将带有c#的TapGestureRecognitor添加到JSON创建的项目中?
因此,我试图反序列化一个JSON文件并从中创建一些项目,到目前为止,一切正常。我的问题是,我想在创建的每个项目中添加一个TapGestureRecognitor,但我不知道怎么做如何将带有c#的TapGestureRecognitor添加到JSON创建的项目中?,c#,xaml,xamarin,xamarin.forms,uitapgesturerecognizer,C#,Xaml,Xamarin,Xamarin.forms,Uitapgesturerecognizer,因此,我试图反序列化一个JSON文件并从中创建一些项目,到目前为止,一切正常。我的问题是,我想在创建的每个项目中添加一个TapGestureRecognitor,但我不知道怎么做 List categorie=JsonConvert.DeserializeObject(categoriejson); Device.beginInvokeMainThread(()=> { foreach(分类中的c类) { 图像=新图像 { Source=ImageSource.FromUri(新Uri(c.i
List categorie=JsonConvert.DeserializeObject(categoriejson);
Device.beginInvokeMainThread(()=>
{
foreach(分类中的c类)
{
图像=新图像
{
Source=ImageSource.FromUri(新Uri(c.imageUrl))
};
image.HeightRequest=105;
CategorieLayout.Children.Add(图像);
因此,我只想为每个创建的图像添加一个点击手势。我曾考虑检查默认情况下为每个图像指定的x:名称,但我没有这样做……任何想法都会受到赞赏。类似的方法应该可行-我是从内存中执行的,因此语法可能不完美
Image image = new Image
{
Source = ImageSource.FromUri(new Uri(c.imageUrl))
};
var tap = new TappedGestureRecognizer();
tap.Tapped += TappedHandler;
image.GestureRecognizers.Add(tap);
如果您试图反序列化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;
}
var parm = ((Image)sender).ClassId;
方法Image\u OnTapped
private void Image_OnTapped(object sender, EventArgs e)
{
// retrieve parameter from sender's ClassId
var parm = ((Image)sender).ClassId;
}
注意:
点击事件的发送方将是GestureRecognitor附加到的控件。在您的情况下,是图像。您可以将数据附加到图像的一个属性,以便从事件处理程序访问它
image.ClassId = c.imageUrl;//attach data to image's `ClassId`
从方法Image\u OnTapped
中获取值,如下所示:
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;
}
var parm = ((Image)sender).ClassId;
点击图片时你想做什么?我将反序列化另一个json文件好的!但是点击图片时我应该把我的动作放在哪里?在
TappedHandler
中,是否可以知道点击了哪个图片?这样我就可以用不同的动作连接每个图片?在XAML中,我曾经使用x:name