我有一个名为" 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。
感谢您的关注!
答案 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));