2010-06-11 79 views
0

我是一个C#初学者,我正试图在WPF中实现一个数字键盘。它由10个类似的按钮组成:如何处理WPF中多个类似按钮上的点击事件?

<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

如果你想使用后面的代码,那么你可以将它连接到单个事件处理程序,然后你可以将发件人投到Button(或FrameworkElement)并检查它的Name property

在哥布林的回答下面展开;如果你想坚持的背后代码和事件,你可以父面板上定义事件:

<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,铸按钮或FrameworElement,检索名称。

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

    if (source == null) 
     return; 

    MessageBox.Show(source.Name); 
} 

另外,您可以采取的办法MVVM,有你所有的按钮都绑定到一个单一的命令,并通过一个CommandParameter来区分它们。

+0

非常感谢!我也会看看指挥。 – 2010-06-11 08:47:50

1

您处理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> 

然后在你的事件处理程序 - 你可以检查e.OriginalSource为按下按钮。

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

+0

谢谢。 嗯,使用内容属性是一个好主意?我可以想象在多语言环境中内容会发生变化。 (尽管如此,我还没有收到) – 2010-06-11 08:49:03

+1

呵呵 - 不,随着你的应用程序的扩展 - 这可能不是一个好的选择。当你走得更远时,我同意韦尔和史蒂文采取命令的方式。 “首先让它工作......”。 – Goblin 2010-06-11 08:52:25

1

你确实需要按照指令的方法,因为你也可能需要按键。