Найти диалог, в котором живет Silverlight FrameworkElement? - PullRequest
1 голос
/ 21 декабря 2011

У меня есть приложение silverlight, состоящее из нескольких диалогов, каждое из которых содержит коллекцию FrameworkElement s.

Можно ли найти диалог, в котором находится элемент Framework?

Ответы [ 3 ]

2 голосов
/ 21 декабря 2011

Вы можете использовать VisualTreeHelper.Код ниже - это то, что я использую, чтобы найти Page в приложении WPF.Вы можете заменить Page любым контейнером, который вам нужен в Silverlight, например Popup.

var parent = VisualTreeHelper.GetParent(this);
    while (!(parent is Page))
    {
        parent = VisualTreeHelper.GetParent(parent);
    }
1 голос
/ 21 декабря 2011

Да, это возможно.Если вы знаете структуру вашего элемента управления, то вы можете использовать FrameworkElement.GetParent(), иначе вы можете использовать алгоритмы обхода дерева , такие как BFS или DFS, чтобы найти элемент своей структуры.

1 голос
/ 21 декабря 2011

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>();
...