当事件button.click发生时,如何获得按钮名称/标签?

时间:2013-12-11 21:48:48

标签: 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;
   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 个答案:

答案 0 :(得分:11)

(sender as Button).Tag

应该工作。

答案 1 :(得分:10)

非常简单,只需将发件人转换为Button对象即可获得所有按钮属性

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

答案 2 :(得分: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 :(得分:2)

http://msdn.microsoft.com/en-us/library/windows/apps/hh758286.aspx

按钮b =发件人为按钮; //你的逻辑

答案 4 :(得分:1)

int tag = (sender as Button).Tag