代码之家  ›  专栏  ›  技术社区  ›  Mart

WPF中的聚焦面板

  •  6
  • Mart  · 技术社区  · 16 年前

    • 用户在面板内单击以使其聚焦
    • 任何 KeyDown 或 KeyUp 事件在面板级别引发
    • 如果单击面板外的另一个可聚焦元素,面板将失去焦点

    我做了实验 FocusManager.IsFocusScope="True" 在面板上和 myPanel.Focus() 返回 true

    我错过什么了吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Mart    16 年前

    经过进一步研究,面板具有键盘焦点,并将其保持到按下箭头键或制表符(开始焦点循环)为止。

    我刚刚为 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;
        }
    );
    

    最后,用 myPanel.Focus();

        2
  •  1
  •   Yogesh    16 年前

    如果面板不包含任何子元素,即使使用 FocusManager.IsFocusScope="True" FocusManager.IsFocusScope=“True”