0

我有一个名为“TextModel”的对象。我为它定义了一个 HierarchicalDataTemplate。

像这样:

<HierarchicalDataTemplate DataType="{x:Type local:TextModel}"
                          ItemsSource="{Binding Children}">
  <TextBlock x:Name="TextPresenter"
             Text="{Binding Text}"
             Style="{StaticResource TextModelStyleMouseOver}" />
</HierarchicalDataTemplate>

此 TextModel 包含在我的 TreeView 中的每个 TreeViewItem 中。而且,在代码隐藏中,我使用 VisualTreeHelper.HitTest 来获取我单击的 TreeViewItem,但它没有将 TreeViewItem 作为 HitTest 结果之一提供给我。HitTest 结果是:TextBlock(以及 Border、Grid 和 ScrollViewer)——我定义的 HierarchicalDataTemplate 中的那个。

我尝试使用 LogicalTreeHelper.GetParent(textBlockFromTheHitTestResults) 但它返回了一个空值。

感谢您的关注!

4

1 回答 1

0

HitTest有一个可用于过滤结果的重载:

VisualTreeHelper.HitTest(
    root,
    o => o is TreeViewItem ? HitTestFilterBehavior.ContinueSkipChildren : HitTestFilterBehavior.Continue,
    r =>
        {
            if (r.VisualHit is TreeViewItem)
            {
                DoSomethingWithTreeViewItem((TreeViewItem)r.VisualHit);
                return HitTestResultBehavior.Stop;
            }

            return HitTestResultBehavior.Continue;
        },
    new PointHitTestParameters(point));
于 2013-01-23T08:41:26.557 回答