WPF中的可聚焦面板

Mar*_*art 6 wpf focus panel keydown

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

  • 用户在Panel中单击以使其获得焦点
  • 在小组级别提出任何KeyDownKeyUp事件
  • 如果单击面板外的另一个可聚焦元素,则面板将失去焦点

FocusManager.IsFocusScope="True"在Panel上进行了实验并myPanel.Focus()返回,true但仍未调用Panel KeyUp事件处理程序.

我错过了什么吗?

Mar*_*art 3

经过更多调查,面板拥有键盘焦点并保持它,直到按下箭头键或 TAB(这会开始焦点循环)。

我刚刚添加了一个KeyDown带有“e.Handled = true;”的事件处理程序 现在一切正常。

总而言之,要有一个可聚焦的面板:

  • 添加FocusManager.IsFocusScope="True"到面板
  • 防止失去对箭头和 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;
    }
);
Run Code Online (Sandbox Code Playgroud)

最后用 给它焦点myPanel.Focus();