【问题标题】:How to follow an event or find all its consumers?如何关注一个事件或找到它的所有消费者?
【发布时间】:2017-02-02 18:27:01
【问题描述】:

我在我的 XAML 代码中定义了一个键绑定:

<KeyBinding Command="{Binding CopyCommand}" Modifiers="Control" Key="C" />

如果我按CTRL+C,则不会调用CopyCommand。如果我改用以下内容:

<KeyBinding Command="{Binding CopyCommand}" Modifiers="Control" Key="U" />

然后按CTRL+U 命令可以正常工作。 我认为这样做的原因是,CTRL+C 在其他地方被处理并且KeyEventArgs 的Handled 值设置为true,所以它没有达到我的控制范围。

我是否有可能找到此/任何给定事件的所有消费者?我能否以某种方式从事件创建到使用时调试/跟踪事件?

仅仅搜索 KeyDown-handlers 并不是一个真正的选择。

我什至可以使用外部软件,例如类似于 Snoop,但更喜欢使用 Visual Studio 2012 或编写代码的解决方案。

【问题讨论】:

  • 我不认为你可以这样做,但是事件冒泡 up,这意味着罪魁祸首可能是你的窗口的孩子(或拥有该窗口的任何东西@ 987654331@)。发生这种情况时,哪个控件具有键盘焦点?
  • 我建议你看看这个话题stackoverflow.com/a/12943306/7486915

标签: c# visual-studio events visual-studio-2012


【解决方案1】:

使用 Snoop 我可以看到 CTRL+U 由 UserControl (StructurePanelV) 处理,而 CTRL+C 由 StructurePanelView 内的 Devexpress`TreeListControl 处理。

因为 TLC 处理 PreviewKeyDown- 但 KeyBinding 侦听 KeyDown-event CTRL+C 不起作用(有关事件的顺序,请查看这篇文章 https://wpf.2000things.com/2012/08/07/619-event-sequence-for-the-key-updown-events/)。

似乎不可能将 XAML-KeyBinding 定义为 PreviewKeybinding。

Laganimal 提供的链接可以正常工作,因为它还注册了 PreviewKeyDown 事件。

【讨论】:

    猜你喜欢
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多