【问题标题】:Routing Key events to other control将关键事件路由到其他控件
【发布时间】:2010-11-28 02:54:50
【问题描述】:

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

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

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

【问题讨论】:

  • 你不能让控件 A 的关键事件做一些检查,如果需要,调用控件 B 的关键事件吗?
  • 不!这不会触发事件,它只会调用曾经与按钮的单击事件相关联的单个特定函数。我想模拟 WPF 发送的实际事件。
  • @Elazar - 查看我的编辑。 RaiseEvent() 方法会起作用吗?

标签: c# wpf events event-handling


【解决方案1】:

你不能这样做吗?

  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 的事件处理程序。

【讨论】:

  • 不!这不会触发事件,它只会调用曾经与按钮的单击事件相关联的单个特定函数。我想模拟 WPF 发送的实际事件。
  • 这就是我要找的东西!
  • 我想知道为什么它被称为引发事件。我搜索了火灾事件并调用事件和触发事件,但没有结果......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2011-03-10
  • 2018-06-14
相关资源
最近更新 更多