如何获得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

有什么好主意吗?

如何获得TreeViewItem使用坐标/点通过命中测试在WPF

您没有说明是什么原因导致您需要这个,这可能会有所帮助。

这有点恶心,但你可以这样做:

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事件,并提供了一个很好的属性,可以在触发器和其他东西中使用,就像上面的一样。