在模型中,我有一个可观察的对象集合。使用ItemsControl(和UserControl),我显示这些元素(形状)。
现在我想在父画布上进行测试。
例如,当我执行此代码时:
HitTestResult result = VisualTreeHelper.HitTest(allContent, new Point(70, 340));
我得到一个HitTestResult
,但我想让模型中的对象代表这个“点击”的形状。
是否有可能获得该物体?
答案 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容器的任何内容,则应防止可视树的失控行走。