2011-09-01 77 views
0

我正在嘗試在某個點更改我的鼠標光標,當我在wpf listview中拖動鼠標時。但是,當我設置我的鼠標時,它會很快被其他東西覆蓋,並返回到拖動光標。WPF等效於Control.CursorChanged事件

我不確定光標變化來自哪裏,它肯定不是來自我的代碼,所以它必須是系統。如果是系統,那麼我必須攔截事件來更改光標,並處理事件以便光標顯示我想要的對象?

那麼是否有這個Control.CursorChanged事件的WPF等價物?或者還有其他方法可以解決這個問題?

編輯:

這裏是我的代碼

private void SetDragCursor() 
    { 
     if (_badDragLoc) 
     { 
      Mouse.OverrideCursor = Cursors.No; 
     } 
     else 
     { 
      Mouse.OverrideCursor = Cursors.Arrow; 
     } 
    } 
    private void listView_DragOver(object sender, DragEventArgs e) 
    { 
     if (at a bad drag location) 
     { 
      _badDragLoc = true; 
      SetDragCursor(); 
     } 
    } 

我也有一拖離開事件處理程序,我在其中也有SetDragCursor()方法,以及一部分。當我一步一步地瀏覽調試器中的每行代碼時,鼠標在進入拖動離開處理程序後立即從無光標變成拖動光標。這就是爲什麼我認爲它必須是系統。如果它確實是系統,那麼如果我能捕獲事件觸發,那麼我可以自己處理這些事件,而不是讓它通過它。

謝謝!

+0

錯誤的方法。如果你使用一個事件,那麼光標就會在兩者之間快速閃爍。你在「設置我的鼠標」中做錯了,不知道它可能是什麼。郵政編碼。 –

+0

看到[拖放概述](http://msdn.microsoft.com/zh-cn/library/ms742859.aspx)?在那裏可能有關於光標的事情... –

+0

@Lin:不關心在調試會話期間遊標如何改變。 –

回答

1

只是不喜歡的工作,一個DragOver事件過程中設置光標的方法如下:

void listView__DragOver(object sender, DragEventArgs e) 
    { 
     if (!e.Data.GetDataPresent("Images")) 
     { 
      e.Effects = DragDropEffects.None; 
      e.Handled = true; 
     } 
    } 

取決於DragDropEffects的枚舉值分配給e.Effects將鼠標光標改變。

不要撥打Mouse.OverrideCursor因爲不是正確的方法。

+0

這個確實有用,在我沒有設定處理爲真之前,所以我想其他的東西修改它。但是,在拖動過程中,我的光標偶爾會閃爍。我將如何去解決這個問題? – George

+0

我還發現改變AllowDrop屬性也會改變遊標,但是這會使我無法與不允許拖放的項目進行交互。我需要在DragOver事件處理程序中與項目交互,因此將AllowDrop設置爲false對我來說不是一種選擇。有沒有其他的方法來改變光標,或者有辦法讓光標停止閃爍?謝謝! – George