我目前正在使用Caliburn.Micro处理WPF项目,并希望将KeyDown
事件绑定到UserControl
。如果打开Window
并且用户按下任何按钮,则应该触发它。
<UserControl x:Class="Test.Views.AppView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:cal="http://www.caliburnproject.org"
cal:Message.Attach="[Event KeyDown] = [TestMethod($executionContext)]" />
不幸的是这段代码不起作用。甚至可以将Event
绑定到UserControl
,而不是绑定到TextBox
或Button
等特定控件?
答案 0 :(得分:1)
如果此UserControl上的控件具有焦点,它将首先接收KeyDown事件并处理它。这将阻止UserControl接收它。
使用PreviewKeyDown捕获事件。 Preview ...事件恰好适用于这种情况。它们从根部冒泡到子控件,而常规事件则向下延伸。
如果冒泡和隧道停止应该停止,请不要忘记在处理程序的末尾设置e.Handled = true;
。