2009-04-17 94 views
3

我想顯示沙漏光標,並禁用BackgroundWorker進程在另一個線程中運行時的窗口。WPF等待光標與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

回答

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 
+0

這樣做。謝謝。 – 2009-04-21 12:55:31

11

另一種方法是全球更改光標,是..

Mouse.OverrideCursor = Cursors.Wait; 

//Do something 
//... 

Mouse.OverrideCursor = null;