0

(我的 WPF 代码实际上是在一个 DLL 中,并且由非 CLR 代码启动并与之交互,所以这不是标准的 WPF 应用程序。我从未在纯 WPF 应用程序中看到过这种行为,但我不确定如果问题与此有关)

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

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

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

4

1 回答 1

0

终于想通了,至少在应用程序空闲时隐藏等待光标(但只是因为我的视图模型明确知道何时发生这种情况,在更复杂的情况下,VM 可能不知道自己何时处于“空闲”状态)

using System.Windows.Input;

...

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

但是我仍然想首先摆脱这个等待光标,如果不离开Mouse.OverrideCursor = Cursors.Arrow设置,这种方法是不可能的,这意味着光标在需要时永远不会改变(比如在文本框上悬停时链接到 ibeam 等)。

于 2012-09-26T14:53:57.057 回答