0

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

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

现在,一旦窗口处于焦点状态,我想在 StackPanel 中接收按键事件。我该如何做到这一点?只是,将代码添加到 StackPanel 中的 PreviewKeyUp/Down 处理程序似乎不起作用;看起来这些事件没有通过 StackPanel 从 Window 传输。

我应该查看 RoutedEventHandlers 吗?

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

4

2 回答 2

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将不会执行。

预览关键字则相反。而不是像示例中那样冒泡的事件,我只是展示了它会隧道。

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

于 2012-09-12T01:09:34.843 回答
0

尝试这个;

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

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

于 2012-09-12T04:14:17.397 回答