2009-09-14 43 views
7

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

编辑:说明:调用我为B写的特定事件处理程序是不够的。我需要模仿真实的事件。因此,例如,我希望如果一个密钥被发送到TextBox,它将被写入TextBox。下面给出的解决方案没有这样做(更不用说事实上,如果新的事件处理程序被添加到B它完全失败)。我知道,WPF区分逻辑焦点和键盘焦点,但我需要两个焦点仍然在控制A,但在某些情况下,将其传入的事件路由到其他控件。

+0

难道你不能只是让你的关键事件控制吗?做一些检查,如果需要调用控制B的关键事件? – Relster 2009-09-14 12:38:08

+0

不!这不会触发事件,它只会调用曾经与按钮的单击事件关联的单个特定函数。我想模拟WPF发送的实际事件。 – 2009-09-14 21:01:36

+0

@Elazar - 查看我的编辑。 'RaiseEvent()'方法会起作用吗? – Donut 2009-09-14 21:21:06

回答

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

+0

不!这不会触发事件,它只会调用曾经与按钮的单击事件关联的单个特定函数。我想模拟WPF发送的实际事件。 – 2009-09-14 20:46:39

+0

这就是我一直在寻找的! – 2009-09-15 06:08:54

+0

我想知道为什么它被称为引发事件。我搜索火灾事件并调用事件和触发事件,但没有结果... – 2009-09-15 06:09:55