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 を取得しましたが、HitTest の結果の 1 つとして TreeViewItem が表示されません。HitTest の結果は次のとおりです。 TextBlock (および Border、Grid、および ScrollViewer) - 私が定義した HierarchicalDataTemplate からのもの。

LogicalTreeHelper.GetParent(textBlockFromTheHitTestResults) を使用しようとしましたが、null が返されました。

ご清聴ありがとうございました!

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 に答える