在Button事件处理程序方法Xamarin Forms中获取控件名称

abd*_*dul 5 c# ios xamarin.forms

我的Xamarin Forms应用程序中有20个按钮.所有按钮共享相同的单击事件方法.我想要做的是使用switch语句检查按钮名称,但我很难找到触发事件的控件名称.

请看代码:

private  void btnCollection_Clicked(object sender, EventArgs args)
    {
        var btn = (Button)sender;

        switch (btn.FindByName) // I want to get the name of the control 
        {

            case "btn1":
                break;

                case "btn2":
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到按钮的名字?

Dan*_*iel 18

您无法访问xaml元素的x:Name属性,因为这只是编译器命名变量的提示.

但是ClassId,您可以设置按钮,以便在处理程序中检索它.像这样:你的xaml:

<Button ClassId="sdsd"
              Clicked="Button_OnClicked"/>
Run Code Online (Sandbox Code Playgroud)

你的xaml.cs

private void LoginButton_OnClicked(object sender, EventArgs e)
        {
            var button = (Button) sender;
            var classId = button.ClassId;
        }
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢丹尼尔。它有效。抱歉,我无法投票支持您给出的答案,因为我还没有足够的声誉。 (2认同)
  • 这解决了问题,但根据 Microsoft [此链接](https://learn.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Element.ClassId?view=xamarin-forms),这不是`ClassId` 的目的。我也被困在这一点上(Xamarin 新手)。所以需要一个真正的解决方案。我也有同样的问题,想唯一地识别按钮。 (2认同)

Ale*_*aro 5

也许这可以帮助您

if(sender is Button){

   Button button = (Button)sender;
   if(button.Equals(myButton1)){
      // You are in myButton1
   }else if(button.Equals(myButton2)){
   }
}
Run Code Online (Sandbox Code Playgroud)