我想让鼠标下的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
。
关于如何做到这一点的任何想法?
答案 0 :(得分: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 / MouseLeave事件,并提供一个可用于触发器和事物的很好的属性,如上所述。
我希望有所帮助。