我正在用程序制作按钮,并将它们添加到堆栈面板中,这样每当用户导航到页面时,按钮就会发生变化。我正在尝试这样做,当我点击创建的按钮时,它会抓住按钮的标签并转到正确的页面。但是,我无法使用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));
}
(sender as Button).Tag
应该有效。
这里有几个解决方案。第一种是简单地检查事件的发送者是否是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));
};
}
int tag = (sender as Button).Tag
http://msdn.microsoft.com/en-us/library/windows/apps/hh758286.aspx
Button b=发件人为Button;//您的逻辑在此