将键事件路由到其他控件

时间:2009-09-14 12:32:18

标签: c# wpf events event-handling

是否有任何标准方法可以将所有关键事件从控件A路由到其他控件B?我希望键盘焦点仍然在A上,但A的事件处理程序会触发B的所有事件处理程序来处理关键事件。

编辑澄清:调用我为B编写的特定事件处理程序是不够的。我需要模仿实际的事件。例如,我希望如果将密钥发送到TextBox,则会将其写入TextBox。下面给出的解决方案不会这样做(更不用说如果将新的事件处理程序添加到B它完全失败了这一事实。)

我知道WPF区分逻辑焦点和键盘焦点,但我需要两个焦点保持控制A,但在某些情况下将其传入事件路由到其他控件。

1 个答案:

答案 0 :(得分:4)

你不能做这样的事吗?

  private void button1_Click(object sender, RoutedEventArgs e)
  {
     // Check if the event needs to be passed to button2's handler
     if (conditionIsMet)
     {
        // Send the event to button2
        button2.RaiseEvent(e);
     }
     else
     {
        // button1's "Click" code
     }
  }

  private void button2_Click(object sender, RoutedEventArgs e)
  {
     // button2's "Click" code
  }

修改:修改后的代码,使用RaiseEvent()方法以编程方式引发特定事件,而不是仅调用button2的事件处理程序。