XAML命中测试

时间:2010-02-25 21:02:11

标签: c# xaml

在模型中,我有一个可观察的对象集合。使用ItemsControl(和UserControl),我显示这些元素(形状)。

现在我想在父画布上进行测试。

例如,当我执行此代码时:

HitTestResult result = VisualTreeHelper.HitTest(allContent, new Point(70, 340));

我得到一个HitTestResult,但我想让模型中的对象代表这个“点击”的形状。

是否有可能获得该物体?

1 个答案:

答案 0 :(得分:2)

要访问绑定到有问题的ListBoxItem的DataContext,我这样做:

HitTestResult result = VisualTreeHelper.HitTest( itemsContainer, position ) ;
FrameworkElement currentElement = result.VisualHit as FrameworkElement ;

while( (currentElement is ListBoxItem)==false
    && currentElement!=itemsControlElement 
    && currentElement!=null)
{
    currentElement = VisualTreeHelper.GetParent(currentElement) as FrameworkElement ;
}

if( currentElement != null )
{
    object dataSource = currentElement.DataContext ;
}

如果切换堆栈遍历以查找UserControl而不是ListBoxItem并将itemsControlElement更改为ItemsControl容器的任何内容,则应防止可视树的失控行走。