如何在WPF中的多个类似按钮上处理点击事件?

Chr*_*der 2 c# wpf code-behind

我是C#初学者,我正在尝试在WPF中实现数字键盘.它由10个类似的按钮组成:

<Button Content="0" Name="button0" Click="anyButtonClicked" />
<Button Content="1" Name="button1" Click="anyButtonClicked" />
<Button Content="2" Name="button2" Click="anyButtonClicked" />
...
<Button Content="9" Name="button9" Click="anyButtonClicked" />
Run Code Online (Sandbox Code Playgroud)

处理所有这些按钮的最佳做法是什么?我是否在每个代码背后的代码中构建一个函数(这将主要是无聊并重复我自己),或者我是否构建一个函数来处理任何单击的按钮?

在第二种情况下,如何识别单击了哪个按钮?我需要访问哪些发件人对象的属性?

Ste*_*ins 5

如果您想使用后面的代码,那么您可以将它连接到单个事件处理程序,然后您可以将发送者强制转换为Button(或FrameworkElement)并检查其Name属性.

扩展Goblin在下面的答案; 如果你想坚持使用代码和事件,你可以在父面板上定义事件:

<StackPanel Button.Click="anyButtonClicked">
    <Button Content="0" Name="button0"/>
    <Button Content="1" Name="button1"/>
    <Button Content="2" Name="button2"/>
    ...
    <Button Content="9" Name="button9"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

然后使用e.OriginalSource,强制转换为Button或FrameworElement来检索名称.

private void anyButtonClicked(object sender, RoutedEventArgs e)
{
    var source = e.OriginalSource as FrameworkElement;

    if (source == null)
        return;

    MessageBox.Show(source.Name);
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以采用MVVM方法,使用单个命令绑定所有按钮,并传递CommandParameter以区分它们.