【问题标题】:Writing a common event bearing same functionality for two identical controls with different names为具有不同名称的两个相同控件编写具有相同功能的公共事件
【发布时间】:2013-06-10 08:59:06
【问题描述】:

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

编辑:包括额外的文本块并添加到事件 cmets

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

这可能吗?

【问题讨论】:

  • 我不明白如何在没有 if-else 的情况下使用这两个控件。
  • 为什么不呢?我看不出有什么原因。
  • 我的o 不会因每个事件调用而不同吗?
  • 如果我在每个对话框上有两个文本块,我想将值从一个文本块复制到另一个。如何分别使用第二个文本块?
  • 这是一个完全不同的问题,与共享事件处理程序没有太大关系。

标签: .net wpf xaml events


【解决方案1】:

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

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

但是您可能会发现将事件放在 XamDialogWindow 而不是文本框上可以为您简化问题,因为您可以检查事件跟踪以找到事件的来源,然后参考 XamDialogWindow 的子项以找到另一个控制

参见原始来源 http://msdn.microsoft.com/en-us/library/system.windows.input.keyeventargs.aspx

【讨论】:

  • 旁注:如果您只想复制文本,则将第二个控件绑定到第一个控件会是更好的方法,但是如果您只是将其用作示例,则此处不适用
【解决方案2】:

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

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

String name=((TextBlock)sender).name;
if(name=="ctrl1")
    {// do something here}
else
    {//do some other here}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-03
    • 2014-11-12
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多