它发生在我所有的 WPF 应用程序中,Visual Studio 2019(绝对基于 WPF)也表现出这种奇怪的行为:
只需在解决方案资源管理器中右键单击一个项目,同时按住 Control 键,您应该注意到,如果您继续按住 Control 修饰符,突出显示的项目将间歇性地工作。
起初,我认为网格和列表控件仍在捕获用于项目选择的修饰键,但这个问题也发生在简单控件(如标准按钮)上的上下文菜单中。
有没有办法解决这个故障?
这是一个带有 wpf 应用程序上下文菜单的 gif。首先我正常移动鼠标,然后按住 Ctrl 键:
如您所见,它出现故障(未突出显示菜单项)。
最佳答案
MenuItem 会在按下某个键时设置一个内部标志,以暂时停止注册鼠标事件,无论它是否实际上是执行导航的键。这反射(reflect)了我看到的行为,即当我按住任何键时,选择会卡顿,而不仅仅是修饰符。 https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/windows/Controls/MenuItem.cs,2049
由于它是私有(private)的,因此没有适当的方法来解决此问题。但是,如果它很重要,您可以为所有 MenuItem
添加一个 KeyDown 处理程序。 s 然后用反射改变它
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 中的一个错误。
关于c# - 按住修饰键时,所有 WPF 上下文菜单似乎都无法正确处理突出显示的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64025310/