C# 当event button.click发生时,如何获取按钮名称/标记?
我以编程方式制作按钮,并将它们添加到堆栈面板中,这样每当用户导航到页面时,按钮都会改变。我正在尝试这样做,当我点击“创建”按钮时,它会抓取按钮的标签并转到正确的页面。但是,我无法使用RoutedEventHandler访问按钮元素。代码如下: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
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