如何获得TreeViewItem使用坐标/点通过命中测试在WPF
本文关键字:测试 WPF TreeViewItem 何获得 坐标 | 更新日期: 2023-09-27 17:52:54
我想把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
。
有什么好主意吗?
您没有说明是什么原因导致您需要这个,这可能会有所帮助。
这有点恶心,但你可以这样做:
IInputElement dropNode = tree.InputHitTest(point);
这可能会给你一个TextBlock,所以你必须使用VisualTreeHelper.GetParent()来导航通过TextBlock, ContentPresenter, Border, Grid,然后最终TreeViewItem。
这当然不是最好的方法,但它应该可以工作。
根据你在做什么,Mike Hillberg的博客提供了一个附加属性方法,可以在触发器中使用。看到
在他的例子中,当鼠标在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事件,并提供了一个很好的属性,可以在触发器和其他东西中使用,就像上面的一样。