3

砂時計のカーソルを表示し、BackgroundWorkerプロセスが別のスレッドで実行されている間はウィンドウを無効にします。

これは私がしていることです:

Private Sub MyButton_Click(...)
    Dim box As New AnotherWpfWindow()
    box.Owner = Me
    ...
    box.ShowDialog()
    If (box.DialogResult.GetValueOrDefault = True) Then
        Me.IsEnabled = False
        Me.Cursor = Cursors.Wait
        MyBackgroundWorker.RunWorkerAsync()
    End If
End Sub

Private Sub MyBackgroundWorker_RunWorkerCompleted(...)
    UpdateInterface()
    Me.IsEnabled = True
    Me.Cursor = Cursors.Arrow
End Sub

ウィンドウは希望どおりに無効になりますが、カーソルは矢印のままです。どうすればそれを待機カーソルにすることができますか?

この質問によると 、 vg1890で機能するようです: WPFウィンドウで1つを除くすべてのコントロールを無効にする

4

2 に答える 2

11

別の方法は、カーソルをグローバルに変更することです..

Mouse.OverrideCursor = Cursors.Wait;

//Do something
//...

Mouse.OverrideCursor = null;
于 2011-11-21T11:36:55.267 に答える
8

ここで起こっているように見えるのは、WPF が無効なウィンドウの Cursor 設定を無視していることです。次の回避策が機能するようです: ウィンドウ自体を無効にする代わりに、ウィンドウのコンテンツを無効にします。

C#:

((UIElement)Content).IsEnabled = false;
Cursor = Cursors.Wait;

// and in RunWorkerCompleted handler:
((UIElement)Content).IsEnabled = true;
Cursor = Cursors.Arrow;

ビジュアルベーシック:

DirectCast(Content, UIElement).IsEnabled = False
Cursor = Cursors.Wait

' and in RunWorkerCompleted handler:'
DirectCast(Content, UIElement).IsEnabled = True
Cursor = Cursors.Arrow
于 2009-04-17T22:26:16.760 に答える