我用VisualTreeHelper在一个看起来像这样的按钮上执行一个HitTest。
<Button Width="100"
Height="100"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="Purple">
Hello world
</Button>但是,当我这样执行实际的HitTest时:
HitTestResult result = VisualTreeHelper.HitTest(_ContentHolder, new Point(xTransform, yTransform));
if (result != null)
{
}返回的对象看起来像这个VisualHit = {System.Windows.Controls.Border},对我来说没有什么意义。
请任何人提供任何指导,说明我可能做错了什么,我将如何返回实际的Button对象(这样我可以触发任何事件处理程序),以及为什么我会遇到这样的行为?
发布于 2015-06-12 14:43:24
如果您查看按钮这里的控件模板,可以看到它几乎完全由一个边界控件组成。既然边境是真正受到打击的地方,那就是正在归还的东西。您应该使用一个常见的助手函数来遍历可视化树以找到实际的按钮。
public static T FindParent<T>(DependencyObject child) where T : DependencyObject
{
//get parent item
DependencyObject parentObject = VisualTreeHelper.GetParent(child);
//we've reached the end of the tree
if (parentObject == null) return null;
//check if the parent matches the type we're looking for
T parent = parentObject as T;
if (parent != null)
return parent;
else
return FindParent<T>(parentObject);
}调用此函数,传递命中测试的结果,并将Button指定为类型应返回被击中的父按钮。
现在..。说了这么多话,你可能会做你想做的错事。如果没有更多关于你正在做的事情的细节,以及更重要的原因,它可能很难指导你。
https://stackoverflow.com/questions/30805656
复制相似问题