2013-07-11 48 views
1

我需要檢測(true或false)鼠標是否位於特定類型的對象上。有許多對象使用的數據模板。我不需要任何對象的實例,我只需要檢測我的鼠標是否在UI上的這種類型的元素上方。如何檢測鼠標是否直接位於WPF中的對象類型

這將是沿着線的東西:

If(mouse.DirectlyOver == StorageElementWrapper) 
{ 
... 
} 

編輯:我的錯誤是,我用我的型像變量

回答

2

需要注意的是DirectlyOver很可能會發現裏面的東西是非常重要的你的元素,而不是你實際尋找的元素。要使用此屬性,您需要查看DirectlyOver元素的父樹。這些方針的東西,與FindAncestorOrSelfthis blog post來:

if (Util.FindAncestorOrSelf<StorageElementWrapper>((DependencyObject)mouse.DirectlyOver) != null) 
{ 
... 
} 

或者,如果你有,(在這個例子中一個名爲myWrappers集合)代碼引用您的StorageElementWrapper S和他們從UIElement獲得,這很可能是一個更好的方法,使用IsMouseOver屬性:

if (myWrappers.Any(x => x.IsMouseOver)) 
    // do something 
2

,如果你有興趣在一個特定項目的一個概念:創建一個OnMouseOver處理該特定對象(或者OnMouseEnter)。通常在WPF中,事情處理這種事件處理方式,而不是命令性地枚舉和發現鼠標指針在哪裏。所以這樣,物品本身可以告訴你鼠標是否在它上面。該項目可以有一個公開的readonly屬性公開這一點,你的代碼可以獲得該屬性的值。

+0

謝謝,這在同事的幫助下向正確的方向發送了我。在WPF中拖放操作非常簡單,但doDragDrop()看起來並不像定製構建那樣有用或有效。 – meisenman

2

我能夠將MouseEnter事件放入我的數據模板的邊框中。這個模板綁定到我的對象。而不是試圖以確定是否鼠標徘徊在對象上執行操作前,

object_MouseEnter(object sender, MouseEventArgs e) 
{ 
    if(....) 
    else 
} 

事件的每一個對象是「通過鼠標進入」時間解僱,我使用了條件語句來決定如何處理事件。

感謝以前有關鼠標事件的建議。

相關問題