当按钮点击事件发生时,如何获取按钮名称/标签?

9

我正在编写程序来创建按钮并将它们添加到堆栈面板中,以便每次用户导航到页面时都会更改按钮。我试图做类似于这样的事情,当我点击创建的按钮时,它将获取按钮的标签并转到正确的页面。然而,我无法使用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));
}
5个回答

15
(sender as Button).Tag

应该可以工作。


15

很简单,只需要将发送者转换为Button对象,就能获取所有按钮属性。

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

4

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

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来处理事件,直接访问你想要的Button实例。

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));
   };
}

3
int tag = (sender as Button).Tag

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接