1

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

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

4

3 回答 3

2

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

var parent = VisualTreeHelper.GetParent(this);
    while (!(parent is Page))
    {
        parent = VisualTreeHelper.GetParent(parent);
    }
于 2011-12-21T03:08:20.193 回答
1

对的,这是可能的。如果您知道控件的结构,那么您可以使用FrameworkElement.GetParent(),否则您可以使用BFS 或 DFS 等树遍历算法来查找您的框架元素。

于 2011-12-21T06:12:39.577 回答
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>();
于 2011-12-21T03:34:24.693 回答