为具有不同名称的两个相同控件编写具有相同功能的公共事件

时间:2013-06-10 08:59:06

标签: .net wpf xaml events

假设我有一个XAML代码,它有两个带有文本块的对话框。我有一个与其中一个对话框上的文本块相关联的事件。我可以以这种方式为另一个对话框中的其他文本块重复使用相同的事件,以便它处理这两个元素吗?我不想创建另一个事件,从现有事件中复制粘贴代码,只是在那里重命名控件或将常用功能分解为接受文本块对象的函数。这就是我梦寐以求的方式:

编辑:包含其他文本块并添加到事件评论中

<XamDialogWindow> 
 <TextBlock Name="ctrl1" KeyUp="keyUp_event" />
 <TextBlock Name="ctrl2" />
 ...
</XamDialogWindow>

<XamDialogWindow> 
 <TextBlock Name="ctrl3" KeyUp="keyUp_event" />
 <TextBlock Name="ctrl4" />
 ...
</XamDialogWindow>

private void keyUp_event(object o, KeyEventArgs a){ //Just one event
  //copy from one control to the other
  //For eg, if event raised from ctrl1 then copy from ctrl1 to ctrl2
}

这可能吗?

2 个答案:

答案 0 :(得分:1)

在XAML中,您根本不需要命名控件。

所以两个控件都会很高兴地触发相同的处理程序

然而,您可能会发现在XamDialogWindow而不是文本框上显示事件可以简化您的事情,因为您可以检查事件跟踪以查找事件的来源,然后引用XamDialogWindow的子项来查找其他事件控制

参见OriginalSource http://msdn.microsoft.com/en-us/library/system.windows.input.keyeventargs.aspx

答案 1 :(得分:0)

是的,你可以直接为两个控件调用相同的事件处理程序。也不需要给控件命名。

在后面的代码中,如果您需要哪个控件触发了该事件,您可以像

那样执行此操作
String name=((TextBlock)sender).name;
if(name=="ctrl1")
    {// do something here}
else
    {//do some other here}