0

たとえば、アプリ内のすべての MediaElements を、メディア要素をマウスでクリックした後に再生/一時停止/再生/一時停止するようにしたい...アプリ内の関連するすべての要素にアタッチするような動作を言うことは可能ですか?

4

1 に答える 1

0

グリッドのすべての子を繰り返し処理し、イベントを適切にアタッチするのは簡単です。

XAML で、必ずグリッドに名前を付けてください。

    <Grid x:Name="gr01"...

イベントをアタッチするための関数を作成し、イベントでそれを呼び出すことができますWindow_Loaded

namespace AttachEventDemo {
   public partial class MainWindow : Window {
      // ... usual initialization code goes here
      private void Window_Loaded( object sender, RoutedEventArgs e ) {
         AttachEvent( );
      }

      private void AttachEvent( ) {
         foreach ( var item in gr01.Children ) {
            switch ( item.GetType( ).ToString( ) ) {
               case "System.Windows.Controls.Button":
                  Button b = item as Button;
                  b.Click += b_Click;
                  txtLog.Text = "Added click event for button " + b.Name + Environment.NewLine + txtLog.Text;
                  break;

               case "System.Windows.Controls.CheckBox":
                  CheckBox cb = item as CheckBox;
                  cb.Checked += cb_Checked;
                  txtLog.Text = "Added click event for checkkbox " + cb.Name + Environment.NewLine + txtLog.Text;
                  break;

               default:
                  break;
            }
         }
      }

      void cb_Checked( object sender, RoutedEventArgs e ) {
         CheckBox cb = sender as CheckBox;
         txtLog.Text = "CheckBox " + cb.Name + " checked changed!" + Environment.NewLine + txtLog.Text;
      }

      private void b_Click( object sender, RoutedEventArgs e ) {
         Button b = sender as Button;

         txtLog.Text = "Button " + b.Name + " was clicked!" + Environment.NewLine + txtLog.Text;
      }
   }
}
于 2013-03-02T16:53:20.113 に答える