首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么VisualTreeHelper会返回按钮的边框

为什么VisualTreeHelper会返回按钮的边框
EN

Stack Overflow用户
提问于 2015-06-12 14:33:18
回答 1查看 706关注 0票数 2

我用VisualTreeHelper在一个看起来像这样的按钮上执行一个HitTest

代码语言:javascript
复制
<Button Width="100"
    Height="100"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    Background="Purple">
    Hello world
</Button>

但是,当我这样执行实际的HitTest时:

代码语言:javascript
复制
HitTestResult result = VisualTreeHelper.HitTest(_ContentHolder, new Point(xTransform, yTransform));
if (result != null)
{               
}

返回的对象看起来像这个VisualHit = {System.Windows.Controls.Border},对我来说没有什么意义。

请任何人提供任何指导,说明我可能做错了什么,我将如何返回实际的Button对象(这样我可以触发任何事件处理程序),以及为什么我会遇到这样的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 14:43:24

如果您查看按钮这里的控件模板,可以看到它几乎完全由一个边界控件组成。既然边境是真正受到打击的地方,那就是正在归还的东西。您应该使用一个常见的助手函数来遍历可视化树以找到实际的按钮。

代码语言:javascript
复制
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指定为类型应返回被击中的父按钮。

现在..。说了这么多话,你可能会做你想做的错事。如果没有更多关于你正在做的事情的细节,以及更重要的原因,它可能很难指导你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30805656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档