ボタンをプログラムで作成し、スタックパネルに追加して、ユーザーがページに移動するたびにボタンが変更されるようにします。作成したボタンをクリックすると、ボタンのタグを取得して正しいページに移動する、このようなことを試みています。ただし、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));
}
(sender as Button).Tag
うまくいくはずです。
ここにはいくつかの解決策があります。 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));
};
}
http://msdn.Microsoft.com/en-us/library/windows/apps/hh758286.aspx
ボタンb =ボタンとしての送信者。 //ここにあなたのロジック
int tag = (sender as Button).Tag