2013-12-11 9 views
7

ボタンをプログラムで作成してスタックパネルに追加するので、ユーザーがページに移動するたびにボタンが変わります。このようなことをやろうとしています。作成したボタンをクリックすると、ボタンのタグをつかんで正しいページに移動します。ただし、RouteEventHandlerを使用してボタン要素にアクセスすることはできません。ここでは、コードです:イベント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

9
(sender as Button).Tag 

は動作するはずです。

4

すべてのボタンのプロパティを取得するボタンに、送信者をキャスト。最初は簡単なチェックにあり、そこに情報もう一つの、より安全なタイプ/優しいオプションが直接アクセスするイベントを処理するためにラムダを作成することです

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

のイベントの送信者が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