0

(私の WPF コードは実際には DLL 内にあり、CLR 以外のコードによって起動および操作されているため、これは標準の WPF アプリケーションではありません。純粋な WPF アプリでこの動作を見たことはありませんが、よくわかりません。問題がそれと関係があるかどうか)

ビューモデルが一定期間急速に変化し、UI スレッドがそれに追いつくためにかなりの時間を費やしている場合 (DataGrid のサイズ変更など、VM が変更されたときに更新する必要があるいくつかのコンバーターといくつかの複雑なレイアウトがあります)行が追加されたときの列など)、待機カーソルが自動的に表示されます(OSによると思います)カーソルを変更するためにコードまたは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 に答える