在WPF中,我可以像Javascript/Jquery一样将同一个点击处理程序同时附加到多个按钮吗?

use*_*291 5 wpf wpf-controls

我有多个按钮而不是做

this.button1.Click += new System.EventHandler(this.button_Click);
this.button2.Click += new System.EventHandler(this.button_Click);
etc.
this.button10.Click += new System.EventHandler(this.button_Click);
Run Code Online (Sandbox Code Playgroud)

我希望能够在伪代码中做这样的事情:

this.button*.Click += new System.EventHandler(this.button_Click);
Run Code Online (Sandbox Code Playgroud)

在Javascript中有可能在WPF中有这样的东西吗?

Mat*_*ton 11

在WPF中,Button.Click是一个路由事件,这意味着事件被路由到可视树,直到它被处理.这意味着您可以在XAML中添加事件处理程序,如下所示:

<StackPanel Button.Click="button_Click">
    <Button>Button 1</Button>
    <Button>Button 2</Button>
    <Button>Button 3</Button>
    <Button>Button 4</Button>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

现在,所有按钮将为其Click事件共享一个处理程序(button_Click).

这是一种在同一父容器中处理同一事件的简单方法.如果你想从代码中做同样的事情,你可以使用AddHandler方法,如下所示:

AddHandler(Button.ClickEvent, new RoutedEventHandler( button_Click));
Run Code Online (Sandbox Code Playgroud)

这将为窗口中的每个按钮单击添加处理程序.您可能希望为StackPanel指定一个名称(例如"stackPanel1"),并为该容器执行此操作:

stackPanel1.AddHandler(Button.ClickEvent, new RoutedEventHandler( button_Click));
Run Code Online (Sandbox Code Playgroud)