WPF中的可聚焦面板

时间:2009-11-12 11:03:23

标签: wpf focus panel keydown

我需要让一个Panel可以在WPF中进行聚焦,这样它就像任何其他可聚焦控件一样捕获键盘事件:

  • 用户点击面板内部以使其专注
  • 在小组级别提出任何KeyDownKeyUp事件
  • 如果单击面板外的其他可聚焦元素,则面板将失去焦点

我在Panel上试验FocusManager.IsFocusScope="True"myPanel.Focus()返回true但仍未调用Panel KeyUp事件处理程序。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

经过更多调查后,Panel会对键盘进行对焦并保持按键直到按下箭头键或TAB键(这会启动焦点循环)。

我刚为KeyDown事件添加了一个处理程序,其中`e.Handled = true;'现在一切正常。

总结一下,要有一个可专注的小组:

  • FocusManager.IsFocusScope="True"添加到Panel
  • 防止对箭头和Tab键失去焦点:
myPanel.KeyDown += new KeyEventHandler(
    delegate(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Left ||
            e.Key == Key.Up ||
            e.Key == Key.Right ||
            e.Key == Key.Down ||
            e.Key == Key.Tab)
            e.Handled = true;
    }
);

最后以myPanel.Focus();为焦点。

答案 1 :(得分:1)

如果您的面板不包含任何子元素,即使使用FocusManager.IsFocusScope="True"也不会触发GotFocus事件。面板不是设计用于键盘输入或焦点。相反,大多数时候(如果子元素是Button控件)FocusManager.IsFocusScope="True"甚至会吃掉KeyUp / KeyDown事件。无论是你的控制还是你的小组,都不会被解雇。