代码之家  ›  专栏  ›  技术社区  ›  Diego Venâncio

如何获取x:code-behind/XAML中元素的名称

  •  3
  • Diego Venâncio  · 技术社区  · 7 年前

    <Image x:Name="image1" Source="image1.png">
    <Image.GestureRecognizers>
    <TapGestureRecognizer Tapped="OnTapGestureTap" NumberOfTapsRequired="1" />
    </Image.GestureRecognizers>
    </Image>
    
    <Image x:Name="image2" Source="image2.png">
    <Image.GestureRecognizers>
    <TapGestureRecognizer Tapped="OnTapGestureTap" NumberOfTapsRequired="1" />
    </Image.GestureRecognizers>
    </Image>
    

    单击时,图像会调用一些操作。现在在 xaml.cs 文件我需要得到的图像被点击使用 转换 :

        async void OnTapGestureTap(object sender, EventArgs args)
        {
            switch () //--HOW VERIFY IN SWiTCH WHICH IMAGE WAS CLICKED???
            {
                case image1:
                    await Navigation.PushAsync(new Image1Page());
                    break;
                case image2:
                    await Navigation.PushAsync(new Image2Page());
                    break;
            }
        }
    
    4 回复  |  直到 7 年前
        1
  •  4
  •   SushiHangover    7 年前

    您可以检索原始图像名称并打开该字符串:

    if (sender is Image image)
    {
        switch (image.Source as FileImageSource).File) 
        {
            case "image1.png":
                Console.WriteLine("image1.png");
                break;
            case "image2.png":
                Console.WriteLine("image2.png");
                break;
        }
    }
    
        2
  •  2
  •   TheGeneral    7 年前

    如果你真的把心放在一个开关上,这可能会奏效。假设发送方实际上是一个 Image x:Name

    使现代化

     if(sender == image1)
          ...
    

    async void OnTapGestureTap(object sender, EventArgs args)
    {
       if(sender is Image image)
       {
          switch (image.Name) // switch on the name
          {
             case "image1":
                await Navigation.PushAsync(new Image1Page());
                break;
             case "image2":
                await Navigation.PushAsync(new Image2Page());
                break;
          }
       }
    }
    

    笔记 :这完全没有经过测试

        3
  •  1
  •   Marko Ivanovic    7 年前

    你可以用 来自图像的属性

    <Image ClassId="image1" Source="image1.png">
       <Image.GestureRecognizers>
          <TapGestureRecognizer Tapped="OnTapGestureTap" NumberOfTapsRequired="1" />
       </Image.GestureRecognizers>
    </Image>
    
    <Image ClassId="image2" Source="image2.png">
       <Image.GestureRecognizers>
          <TapGestureRecognizer Tapped="OnTapGestureTap" NumberOfTapsRequired="1" />
       </Image.GestureRecognizers>
    </Image>
    

    在后台切换一下

    async void OnTapGestureTap(object sender, EventArgs args)
    {
        var image = sender as Image;
        switch (image.ClassId)
        {
            case "image1":
                await Navigation.PushAsync(new Image1Page());
                break;
            case "image2":
                await Navigation.PushAsync(new Image2Page());
                break;
        }
    }
    
        4
  •  0
  •   sfyan_pgr    7 年前

    试试这个

     async void OnTapGestureTap(object sender, EventArgs args)
    { 
      var image = sender as Image;
    
        switch (image) 
        {
            case image1:
                await Navigation.PushAsync(new Image1Page());
                break;
            case image2:
                await Navigation.PushAsync(new Image2Page());
                break;
        }
    }
    
        5
  •  0
  •   kristytoman    5 年前

    StyleID 如果未指定,则此属性将继承 x:Name

    x:姓名

    if (sender == image1)
    {
        await Navigation.PushAsync(new Image1Page());
    }
    else if (sender == image2) 
    {
        await Navigation.PushAsync(new Image2Page());
    }
    

    名称“image1”在当前上下文中不存在。

    但是当XAML加载它时,将创建上下文。

    推荐文章