我是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" />
处理所有这些按钮的最佳做法是什么?我是否在每个代码背后的代码中构建一个函数(这将主要是无聊并重复我自己),或者我是否构建一个函数来处理任何单击的按钮?
在第二种情况下,如何识别单击了哪个按钮?我需要访问哪些发件人对象的属性?
答案 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方法,因为你也可能需要它来进行按键操作。