WPF使用BackgroundWorker线程实现等待光标

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

窗口已经像我想要的那样变为禁用状态,但光标仍然是箭头。我该如何将其设置为等待光标?
根据这个问题:Disabling all but one control in a WPF window,似乎对于vg1890是有效的。
2个回答

11

另一种方法是全局更改光标,如下所示:

Mouse.OverrideCursor = Cursors.Wait;

//Do something
//...

Mouse.OverrideCursor = null;

8
这里似乎发生的是WPF忽略了禁用窗口上的光标设置。以下解决方法似乎可行:不要禁用窗口本身,而是禁用窗口的内容

C#:

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

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

Visual Basic:

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

' and in RunWorkerCompleted handler:'
DirectCast(Content, UIElement).IsEnabled = True
Cursor = Cursors.Arrow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接