我在WPF中有以下层次结构:
窗口>网格> ScrollViewer> StackPanel> [UserControl1,UserControl2 ...]
现在,我想在窗口聚焦时立即收到StackPanel中的按键事件。我该如何做到这一点?仅仅是,在StackPanel中向PreviewKeyUp / Down处理程序添加代码似乎不起作用;看起来这些事件并没有从Window通过StackPanel进行隧道传输。
我应该关注RoutedEventHandlers吗?
编辑:我注意到的是,如果堆栈面板具有焦点,则会收到关键事件。否则,它没有。
答案 0 :(得分:0)
确保未处理该事件。
例如,如果你有:
<Grid KeyDown="Grid_KeyDown">
<ScrollViewer Name="scrollViewer1" >
<StackPanel Name="stackPanel1" >
<TextBox Height="23" Name="textBox1" KeyDown="textBox1_KeyDown" />
</StackPanel>
</ScrollViewer>
</Grid>
请注意,首先触发文本框事件。然后另一件事发生了。
如果我放置
e.Handled = true;
在方法textBox1_KeyDown中,然后事件将不会出现意味着方法Grid_KeyDown
将无法执行。
预览关键字以相反的方式工作。而不是在示例中冒出来的事件,我只是表明它会隧道。
尝试确保未处理该事件。也许用户控件可以处理它。
答案 1 :(得分:0)
试试这个;
EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Control), System.Windows.Controls.Control.KeyDownEvent, yourdelegate);
将其添加到应用程序启动。