按键事件隧道

时间:2012-09-12 00:57:48

标签: c# wpf

我在WPF中有以下层次结构:

窗口>网格> ScrollViewer> StackPanel> [UserControl1,UserControl2 ...]

现在,我想在窗口聚焦时立即收到StackPanel中的按键事件。我该如何做到这一点?仅仅是,在StackPanel中向PreviewKeyUp / Down处理程序添加代码似乎不起作用;看起来这些事件并没有从Window通过StackPanel进行隧道传输。

我应该关注RoutedEventHandlers吗?

编辑:我注意到的是,如果堆栈面板具有焦点,则会收到关键事件。否则,它没有。

2 个答案:

答案 0 :(得分:0)

确保未处理该事件。

例如,如果你有:

 <Grid KeyDown="Grid_KeyDown">
    <ScrollViewer  Name="scrollViewer1" >
        <StackPanel Name="stackPanel1" >
            <TextBox Height="23" Name="textBox1" KeyDown="textBox1_KeyDown" />
        </StackPanel>
    </ScrollViewer>
</Grid>

enter image description here

请注意,首先触发文本框事件。然后另一件事发生了。

如果我放置

e.Handled = true; 

在方法textBox1_KeyDown中,然后事件将不会出现意味着方法Grid_KeyDown将无法执行。

预览关键字以相反的方式工作。而不是在示例中冒出来的事件,我只是表明它会隧道。

尝试确保未处理该事件。也许用户控件可以处理它。

答案 1 :(得分:0)

试试这个;

EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Control), System.Windows.Controls.Control.KeyDownEvent, yourdelegate);

将其添加到应用程序启动。