当事件无法控制时捕获KeyDown

时间:2015-07-24 07:48:34

标签: c# wpf keyboard routed-events

首先:我知道有数以千计的答案如下:"为Keyboard.KeyDownEvent添加处理程序并享受乐趣!"。但在我的情况下,这不起作用。

我有一个自定义控件CustomControl,它源自Canvas但没有Children。相反,它吸引了他们的孩子"直接转到DrawingContext中的OnRender。我的控件是HitTestVisible,它是制表位但不可调焦。它经常被重复使用,有时在ScrollViewer中。

CustomControl有一个自定义实现,用于选择文本等内容,并应将选定的文本复制到 Ctrl + C 上的ClipBoard。

为此,我在构造函数中添加了一个处理程序:

public CustomControl()
{
    //// ... other stuff
    AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)CopyMarkedNucleotidesToClipboard);
}

以下是问题:当我的控件位于ScrollViewer内,并且我点击 Ctrl + C 时,会引发KeyDownEventScrollViewer和气泡到窗口,因此永远不会到达我的控制。

CustomControl内我可以在其所在的窗口中捕获每个 Ctrl + C 吗?

PS:我已设置IsTabStop="False"Focusable="False"。但是,ScrollViewer的下一个兄弟会引发事件,这个事件仍会冒泡到窗口。而且我不想浏览视觉树中较高的所有控件,并将IsTabStop="False"Focusable="False"设置为错误...

我已经找到了这篇文章http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx,但我认为,必须有一种更像wpf的方式!

1 个答案:

答案 0 :(得分:0)

Sinatr的建议是正确的!谢谢!

解决方案是在加载中找到父窗口并将其替换为struct proc_bsdinfo { ... struct timeval pbi_start; ... }

KeyDownEvent