当按住修改键时,所有 WPF 上下文菜单似乎都无法正确处理突出显示的项目
All WPF context menus do not seem to handle highlighting items properly when a modifier key is held down
它发生在我所有的 WPF 应用程序中,Visual Studio 2019(绝对是基于 WPF 的)也表现出这种奇怪的行为:
只需在按住 Control 键的同时右键单击解决方案资源管理器中的某个项目,您就会注意到,如果您一直按住 Control 键,项目突出显示会间歇性地起作用。
起初我假设网格和列表控件仍在捕捉项目选择的修改键,但这个问题也出现在像标准按钮这样的简单控件上的上下文菜单中。
有没有办法解决这个问题?
这是一个 gif 动图,其中包含 wpf 应用程序上下文菜单。首先我正常移动鼠标,然后用 Ctrl 按住:
如您所见,它出现了故障(没有突出显示菜单项)。
MenuItem 在按下某个键时设置一个内部标志,该标志会暂时停止注册鼠标事件,而不管它是否实际上是一个执行导航的键。这反映了我看到的行为,即当我按住 any 键时,选择会断断续续,而不仅仅是修饰符。 https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/windows/Controls/MenuItem.cs,2049
由于它是私有的,所以没有正确的方法来解决这个问题。但是,如果它很重要,您可以为所有 MenuItem
添加一个 KeyDown 处理程序,然后使用反射
更改它
var menu = sender as MenuItem;
if (menu != null)
{
var parent = ItemsControl.ItemsControlFromItemContainer(menu);
MethodInfo setBoolField = menu.GetType().GetMethod("SetBoolField",
BindingFlags.NonPublic | BindingFlags.Static);
setBoolField.Invoke(this, new object[] { parent, 0x04, false });
}
如果需要,您可以先检查该键是否为导航键以保留所需的行为。
我个人认为这是 WPF 中的一个错误。
它发生在我所有的 WPF 应用程序中,Visual Studio 2019(绝对是基于 WPF 的)也表现出这种奇怪的行为:
只需在按住 Control 键的同时右键单击解决方案资源管理器中的某个项目,您就会注意到,如果您一直按住 Control 键,项目突出显示会间歇性地起作用。
起初我假设网格和列表控件仍在捕捉项目选择的修改键,但这个问题也出现在像标准按钮这样的简单控件上的上下文菜单中。
有没有办法解决这个问题?
这是一个 gif 动图,其中包含 wpf 应用程序上下文菜单。首先我正常移动鼠标,然后用 Ctrl 按住:
如您所见,它出现了故障(没有突出显示菜单项)。
MenuItem 在按下某个键时设置一个内部标志,该标志会暂时停止注册鼠标事件,而不管它是否实际上是一个执行导航的键。这反映了我看到的行为,即当我按住 any 键时,选择会断断续续,而不仅仅是修饰符。 https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/windows/Controls/MenuItem.cs,2049
由于它是私有的,所以没有正确的方法来解决这个问题。但是,如果它很重要,您可以为所有 MenuItem
添加一个 KeyDown 处理程序,然后使用反射
var menu = sender as MenuItem;
if (menu != null)
{
var parent = ItemsControl.ItemsControlFromItemContainer(menu);
MethodInfo setBoolField = menu.GetType().GetMethod("SetBoolField",
BindingFlags.NonPublic | BindingFlags.Static);
setBoolField.Invoke(this, new object[] { parent, 0x04, false });
}
如果需要,您可以先检查该键是否为导航键以保留所需的行为。
我个人认为这是 WPF 中的一个错误。