2011-04-21 25 views
3

我正在嘗試使用鼠標下的TreeViewItem,但找不到辦法。如何通過WPF中的HitTesting使用座標/點來獲取TreeViewItem?

目前我使用此:

Layer GetItemAtLocation (Point point) 
{ 
    HitTestResult result = VisualTreeHelper.HitTest (this, point); 
    FrameworkElement element = result.VisualHit as FrameworkElement; 
    if (element != null) 
     return element.DataContext as Layer; 

    return null; 
} 

這種方法是有用的,但並沒有給下鼠標TreeViewItem

有關如何做到這一點的任何想法?

回答

4

你不指定什麼導致你需要這個,這會有所幫助。

這是一種討厭的,但你可以這樣做:

IInputElement dropNode = tree.InputHitTest(point); 

這將可能給你一個TextBlock,所以你將不得不使用VisualTreeHelper.GetParent()通過TextBlock的瀏覽起來, ContentPresenter,Border,Grid,最後是TreeViewItem。

這當然不是最好的方法,但它應該工作。

根據你在做什麼,Mike Hillberg的博客提供了一個用於觸發器的附屬屬性方法。請參閱here

在他的示例中,當鼠標懸停時,他正在轉換TreeViewItem綠色。

<TreeView.Resources> 
     <Style TargetType="TreeViewItem"> 
     <Style.Triggers> 
      <Trigger Property="local:MyTreeViewHelper.IsMouseDirectlyOverItem" Value="True"> 
      <Setter Property="Background" Value="Green" /> 
      </Trigger> 
     </Style.Triggers> 
     </Style> 
    </TreeView.Resources> 

的MyTreeViewHelper類保持跟蹤的MouseEnter /鼠標離開事件,並給出了一個很好的屬性,可以在觸發器和東西可以使用,像上面的。

我希望有幫助。

+0

感謝利茲,我需要它爲此目的:http://stackoverflow.com/questions/5747589/how-to-mimic-left-click-behaviour-for-right-click-for-a-treeview-in -wpf / – 2011-04-21 22:48:13

相關問題