web-dev-qa-db-ja.com

イベントbutton.clickが発生したときに、ボタンの名前/タグをどのように取得しますか?

ボタンをプログラムで作成し、スタックパネルに追加して、ユーザーがページに移動するたびにボタンが変更されるようにします。作成したボタンをクリックすると、ボタンのタグを取得して正しいページに移動する、このようなことを試みています。ただし、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));
}
9
WiteCastle
(sender as Button).Tag

うまくいくはずです。

12
SouthShoreAK

ここにはいくつかの解決策があります。 1つ目は、イベントの送信者が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));
  }
}

もう1つのタイプセーフ/フレンドリーなオプションは、必要な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));
   };
}
4
JaredPar

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

ボタンb =ボタンとしての送信者。 //ここにあなたのロジック

2
d.lavysh
int tag = (sender as Button).Tag
1
Jaihind