找到一个Silverlight FrameworkElement的对话框?

时间:2011-12-21 01:33:43

标签: c# silverlight dialog frameworkelement

我有一个silverlight应用程序,由几个对话框组成,每个对话框中都包含FrameworkElement个集合。

是否可以找到Framework元素所在的对话框?

3 个答案:

答案 0 :(得分:2)

您可以使用VisualTreeHelper。下面的代码是我用来在WPF应用程序中查找Page的代码。您可以使用Silverlight中所需的任何容器替换Page,也许Popup

var parent = VisualTreeHelper.GetParent(this);
    while (!(parent is Page))
    {
        parent = VisualTreeHelper.GetParent(parent);
    }

答案 1 :(得分:1)

http://forums.silverlight.net/p/55369/142519.aspx有一种方法可以简化上面的示例代码并使其适用于通用:

public static class ControlFinder
{
    public static T FindParent<T>(this UIElement control) where T: UIElement
    {
        UIElement p = VisualTreeHelper.GetParent(control) as UIElement;
        if (p != null)
        {
            if (p is T)
                return p as T;
            else
                return ControlFinder.FindParent<T>(p);
        }
        return null;
    }
}

使用它像:

var page = myElement.FindParent<Page>();

答案 2 :(得分:1)

是的,这是可能的。如果你知道你的控件的结构,那么你可以使用FrameworkElement.GetParent(),否则你可以使用像{BFS或DFS这样的Tree-traversal algorithms来找到你的框架元素。