C# 当event button.click发生时,如何获取按钮名称/标记?

C# 当event button.click发生时,如何获取按钮名称/标记?,c#,wpf,windows-phone-8,windows-phone,visual-studio-2013,C#,Wpf,Windows Phone 8,Windows Phone,Visual Studio 2013,我以编程方式制作按钮,并将它们添加到堆栈面板中,这样每当用户导航到页面时,按钮都会改变。我正在尝试这样做,当我点击“创建”按钮时,它会抓取按钮的标签并转到正确的页面。但是,我无法使用RoutedEventHandler访问按钮元素。代码如下: foreach (item in list) { Button newBtn = new Button(); newBtn.Content = "Button Text"; newBtn.Tag = item.Tag; newBt

我以编程方式制作按钮,并将它们添加到堆栈面板中,这样每当用户导航到页面时,按钮都会改变。我正在尝试这样做,当我点击“创建”按钮时,它会抓取按钮的标签并转到正确的页面。但是,我无法使用RoutedEventHandler访问按钮元素。代码如下:

foreach (item in list)
{ 
   Button newBtn = new Button();
   newBtn.Content = "Button Text";
   newBtn.Tag = item.Tag;
   newBtn.Name = item.Name;
   newBtn.Click += new RoutedEventHandler(newBtn_Click);
}

private void newBtn_Click(object sender, RoutedEventArgs e)
{
   NavigationService.Navigate(new Uri("/DetailPage.xaml?selectedItem=" + sender.Tag, UriKind.Relative));
}

应该可以工作。

非常简单,只需将发送者强制转换为按钮对象,即可获得所有按钮属性

  private void newBtn_Click(object sender, RoutedEventArgs e)
    {
       NavigationService.Navigate(new Uri("/DetailPage.xaml?selectedItem=" + ((Button)sender).Tag, UriKind.Relative));
    }

这里有几个解决方案。第一种方法是简单地检查事件的发送者是否是
按钮
元素,并使用其中的信息

private void newBtn_Click(object sender, RoutedEventArgs e)
{
  Button b = sender as Button;
  if (b != null) { 
    NavigationService.Navigate(new Uri("/DetailPage.xaml?selectedItem=" + b.Tag, UriKind.Relative));
  }
}
另一个类型更安全/友好的选项是创建lambda来处理事件,该事件直接访问所需的
按钮
实例

foreach (item in list)
{ 
   Button newBtn = new Button();
   newBtn.Content = "Button Text";
   newBtn.Tag = item.Tag;
   newBtn.Name = item.Name;
   newBtn.Click += (sender, e) => {
     NavigationService.Navigate(new Uri("/DetailPage.xaml?selectedItem=" + newBtn.Tag, UriKind.Relative));
   };
}

按钮b=发送器为按钮; //你的逻辑在这里

int tag = (sender as Button).Tag
int tag = (sender as Button).Tag