在什么情况下WPF将使键盘焦点回到主窗口?

Bri*_*din 5 c# wpf focus

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

有人告诉我,在某些其他情况下,可以为主窗口提供键盘焦点-例如,如果控件具有键盘焦点,IsEnabledIsVisible变为false。在什么情况下会发生这种情况?我一直在疯狂地谷歌搜索,但是没有找到任何有关此的信息。

Dan*_*iel 3

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

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

请参阅“FocusScope 的设计目的是什么?” 在使用 WPF FocusScope中。