如何获取包含数据模板化对象的逻辑树项

时间:2013-01-23 08:30:47

标签: wpf silverlight xaml datatemplate hierarchicaldatatemplate

我有一个名为" 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),但它返回了null。

感谢您的关注!

1 个答案:

答案 0 :(得分:0)

HitTest有一个overload可用于过滤结果:

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));