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 : Disabling all but one control in a WPF window

4

2 回答 2

11

另一种方法是全局更改光标,是..

Mouse.OverrideCursor = Cursors.Wait;

//Do something
//...

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

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

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 回答