2010-02-18 86 views
1

我想獲得鼠標懸停控件的類型。請幫助在mouseover上獲取控件的類型

+0

我們需要更多的細節。沒有鼠標懸停事件,因此您要參考哪個實際事件? MouseMove或MouseEnter?期望將相同的事件處理程序附加到不同類型的多個控件,並且您想確定哪種類型正在觸發?或者您是否期望將冒泡事件的處理程序附加到某個父容器? – AnthonyWJones 2010-02-18 12:29:25

回答

1

你可以得到UIElement的類型在其上鼠標當前正在使用MouseMove事件移動。由於這是冒泡事件,因此您可以將處理程序附加到容器(如Canvas)。

鼠標當前移動的UIElement可以從MouseEventArgsOriginalSource屬性獲得。

因此,以確定在該鼠標移動,你可以使用這樣的代碼類型: -

void Canvas_MouseMove(object sender, MouseEventArgs e) 
{ 

    Type currentType = e.OriginalSource.GetType(); 
    // Make decisions based on value of currentType here 
} 

但是你需要小心,MouseMove事件頻繁觸發用戶移動鼠標,所以你可能要延遲任何繁重的工作,直到最後一次鼠標移動後有一段時間。

不幸的是沒有事件發生鼠標。

另一種替代方法是將相同的MouseEnter處理程序附加到您添加到Canvas的每個子UIElement。在這種情況下,您可以使用sender而不是e.OriginalSource。如果從Canvas中刪除元素,則必須小心刪除該處理程序,否則可以創建看起來像是內存泄漏的內容。

0

mouse_enter事件添加到控件。

你可以用一行代碼的類型遵循

var x = sender.GetType(); 

然後,您可以使用類似的比較吧:

if (x.Equals(typeof(TreeView))) 
+0

感謝回覆Johannes 但是我的容器中有多個控件,比如說Ellipse,Rectangle,TextBlock等等,我應該可以在一個函數中獲得類型 – Sathish 2010-02-18 12:20:48