C# 如何处理WPF中多个类似按钮上的单击事件?

C# 如何处理WPF中多个类似按钮上的单击事件?,c#,wpf,code-behind,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" /> .

我是一名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" />

...
处理所有这些按钮的最佳实践是什么?我是在代码中为每个按钮构建一个函数(这将是我自己最无聊和重复的),还是构建一个来处理任何单击的按钮


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

您可以处理该按钮。单击父控件中的事件:

<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>

...
然后在eventhandler中,您可以检查e.OriginalSource中按下的按钮


编辑:至于您关于如何处理它的问题-您可以使用按下按钮的内容属性来找出键,然后使用该属性来执行逻辑。

如果您想使用代码隐藏,则可以将其连接到单个事件处理程序,然后可以将发送器强制转换为按钮(或框架元素)并检查其属性

下面是地精的答案;如果要继续使用代码隐藏和事件,可以在父面板上定义事件:

<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>

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

您确实需要使用命令方法,因为您可能还需要它来按键。

谢谢。嗯,使用内容属性是个好主意吗?我可以想象内容在多语言环境中的变化。(不过,我还没有到目前为止。)呵呵——不,随着应用程序的扩展——这可能不是一个好的ide。我同意Veer和Steven的意见,当你再往前走一点的时候,他们会按命令行事。“首先让它工作……”。
private void anyButtonClicked(object sender, RoutedEventArgs e)
{
    var source = e.OriginalSource as FrameworkElement;

    if (source == null)
        return;

    MessageBox.Show(source.Name);
}