Wpf 即使应用程序处于空闲状态,也要等待光标卡住,直到移动鼠标为止

Wpf 即使应用程序处于空闲状态,也要等待光标卡住,直到移动鼠标为止,wpf,cursor,Wpf,Cursor,(我的WPF代码实际上位于DLL中,由非CLR代码启动和交互,因此这不是标准的WPF应用程序。我从未在纯WPF应用程序中见过这种行为,但我不确定问题是否与此有关) 如果我的视图模型在一段时间内快速变化,UI线程花费大量时间试图跟上它(我有几个转换器和一些复杂的布局,当VM发生变化时必须刷新,例如数据网格在添加行时调整其列的大小,等等),等待光标会自动显示(我猜是由操作系统显示的),我在代码或XAML中没有做任何更改光标的操作。在WPF中将光标设置为Cursors.wait时得到的等待光标也不同。

(我的WPF代码实际上位于DLL中,由非CLR代码启动和交互,因此这不是标准的WPF应用程序。我从未在纯WPF应用程序中见过这种行为,但我不确定问题是否与此有关)

如果我的视图模型在一段时间内快速变化,UI线程花费大量时间试图跟上它(我有几个转换器和一些复杂的布局,当VM发生变化时必须刷新,例如数据网格在添加行时调整其列的大小,等等),等待光标会自动显示(我猜是由操作系统显示的),我在代码或XAML中没有做任何更改光标的操作。在WPF中将光标设置为
Cursors.wait
时得到的等待光标也不同。它是箭头光标,但旁边有一个等待圈

我不希望这种情况发生,因为程序不是真正的“等待”。大多数事情都是在后台线程中进行的,UI线程只是花了很多时间试图跟上它,然而UI并不是没有响应的。更重要的是,即使在应用程序(包括后台线程)变为空闲状态后,该光标仍会保持不变,直到移动鼠标为止。一旦移动鼠标,它就会消失,但是如果用户不移动鼠标,他可能会不经意地认为应用程序仍然很忙,而实际上它是完全空闲的


使用WPF函数设置游标的任何方式都无法覆盖此游标。

最终找到了至少在应用程序空闲时隐藏等待游标的方法(但这只是因为我的视图模型明确知道何时会发生这种情况,在更复杂的情况下,VM可能不知道自己何时“空闲”)

但我还是想首先去掉这个等待光标,如果不离开
Mouse.overridecursors=Cursors.Arrow
set,这个方法是不可能的,这意味着光标在需要时永远不会改变(比如在文本框上悬停时将g链接到ibeam等)

using System.Windows.Input;

...

Mouse.OverrideCursor = Cursors.Arrow;
Mouse.OverrideCursor = null;