2013-12-11 17 views
7

我以编程方式制作按钮并将它们添加到堆叠面板,以便每次用户导航到页面时按钮都会更改。我试图做这样的事情,当我点击创建的按钮时,它会抓住按钮的标签并转到正确的页面。但是,我无法使用RoutedEventHandler访问按钮元素。下面的代码:当事件button.click发生时,如何获得按钮名称/标记?

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

回答

8

很简单只投发送到按钮对象的你将得到所有按钮的属性

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

谢谢!非常简单! – WiteCastle

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)); 
    }; 
} 
1
int tag = (sender as Button).Tag 
相关问题