Wpf 如何寻找父母?

Wpf 如何寻找父母?,wpf,parent,Wpf,Parent,我在建筑方面: Grid a = ((((usercontrol.Parent as DockPanel).Parent as ScrollViewer).Parent as Grid) 是否可以找到树或父元素 示例:Grid a=GetFirstParent(usercontrol,“Grid”)Grid-is-Type元素使用该类 它有一个方法GetParent,返回控件的父对象(实际上是一个DependencyObject)。Grid a=userControl.FindParent()

我在建筑方面:

Grid a = ((((usercontrol.Parent as DockPanel).Parent as ScrollViewer).Parent as Grid)
是否可以找到树或父元素

示例:Grid a=GetFirstParent(usercontrol,“Grid”)Grid-is-Type元素使用该类

它有一个方法GetParent,返回控件的父对象(实际上是一个DependencyObject)。

Grid a=userControl.FindParent();

公共静态T FindParent(此DependencyObject startElement)
其中T:DependencyObject
{
DependencyObject父对象=GetParentObject(startElement);
如果(父项==null)
返回null;
T typedParent=父项为T;
if(typedParent!=null)
{
返回类型parent;
}
返回FindParent(父级);
}

这里只是您的设计说明。如果“as”运算符无法转换,它将返回null。使此特定功能极其依赖于用户控件的视觉结构。如果更改它,可能会抛出null异常
    Grid a = userControl.FindParent<Grid>();
    public static T FindParent<T>(this DependencyObject startElement)
        where T : DependencyObject
    {
        DependencyObject parent = GetParentObject(startElement);
        if (parent == null)
            return null;

        T typedParent = parent as T;
        if (typedParent != null)
        {
            return typedParent;
        }

        return FindParent<T>(parent);
    }