gpt4 book ai didi

c# - 在什么情况下 WPF 会将键盘焦点返回到主窗口?

转载 作者:太空狗 更新时间:2023-10-29 23:38:39 29 4
gpt4 key购买 nike

在我正在处理的 WPF 应用程序中,我有一个包含两个项目的 MenuItem。单击 MenuItem 时,它会获得键盘焦点并打开其子菜单。再次单击 MenuItem 时,子菜单关闭,并且由于某种原因,主窗口获得键盘焦点。我需要 MenuItem 来保持焦点。

有人告诉我,在某些其他情况下,主窗口可能会获得键盘焦点 - 例如,如果控件具有键盘焦点并且 IsEnabledIsVisible 变为错误。在哪些情况下会发生这种情况?我一直在疯狂地谷歌搜索,但没有找到任何关于此的信息。

最佳答案

据我所知,这是预期的行为。默认情况下,WPF 菜单是焦点范围,因此菜单中接收焦点的任何控件都不会更改窗口的主要逻辑焦点。此外,某些 WPF 控件有时会调用 Keyboard.Focus(null); (例如 Button 在单击时执行此操作)。此调用具有将键盘焦点返回到主要逻辑焦点的效果。我怀疑当菜单关闭时也会发生这种情况。

尝试禁用菜单上的焦点范围:<Menu FocusManager.IsFocusScope="False">当菜单项获得键盘焦点,并且不在任何焦点范围内时,它将获得主要的逻辑焦点。这意味着 Keyboard.Focus(null) call 会将焦点保持在菜单项上。然而,这也将阻止子菜单中的命令将焦点返回到非菜单窗口内容,因此路由命令将无法找到它们的目标。

参见“FocusScope 的设计目的是什么?”在 Using the WPF FocusScope .

关于c# - 在什么情况下 WPF 会将键盘焦点返回到主窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26537773/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com