Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将带有c#的TapGestureRecognitor添加到JSON创建的项目中?_C#_Xaml_Xamarin_Xamarin.forms_Uitapgesturerecognizer - Fatal编程技术网

如何将带有c#的TapGestureRecognitor添加到JSON创建的项目中?

如何将带有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

因此,我试图反序列化一个JSON文件并从中创建一些项目,到目前为止,一切正常。我的问题是,我想在创建的每个项目中添加一个TapGestureRecognitor,但我不知道怎么做


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