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

时间:2010-06-11 08:27:30

标签: 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" />

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

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

3 个答案:

答案 0 :(得分:5)

如果你想使用后面的代码,你可以将它连接到一个事件处理程序,然后你可以将发送者强制转换为Button(或FrameworkElement)并检查它Name property

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

然后使用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);
}

或者你可以采用MVVM方法,只需要一个命令就可以绑定所有按钮,并传递一个CommandParameter来区分它们。

答案 1 :(得分:1)

您在Parent控件中处理Button.Click事件:

<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是否按下按钮。

编辑:关于如何处理它的问题 - 您可以使用按下的按钮的Content-property来找出密钥,然后使用它来执行逻辑。

答案 2 :(得分:1)

你真的需要采用Command方法,因为你也可能需要它来进行按键操作。