Как вы можете получить родительский элемент UIElement? - PullRequest
8 голосов
/ 15 февраля 2011

Хорошо, я знаю, что FrameworkElement, который является прямым подклассом UIElement, имеет свойство Parent, но у панелей есть дочерние элементы типа UIElement, а не FrameworkElement (дочерние элементы типа UIElementCollection)Кажется, это означает, что вы можете добавить UIElement s непосредственно в Panel.

Тем не менее, если у вас есть UIElement и вы хотите увидеть, есть ли у него родительский элемент, это единственный способ, которым я могузнаю, как это проверить с помощью VisualTreeHelper, но это визуальное дерево, а не логическое дерево.(По крайней мере, мы знаем, что у Panel нет шаблона, так что, возможно, так оно и есть, но все же ...)

Итак, кроме VisualTreeHelper, кто-нибудь знает, как узнать, какая панель является родительской?UIElement?(... и есть мысли, почему они не просто определили там свойство Parent вместо FrameworkElement?)

Спасибо!

1 Ответ

7 голосов
/ 15 февраля 2011

Что ж, если вам нужно найти логического родителя, вы можете просто использовать LogicalTreeHelper так же, как VisualTreeHelper.

Что касается "... и подумать, почему они этого не сделалипросто определите там свойство Parent вместо FrameworkElement? ".По сути, понятие «Логическое дерево» вводится на уровне FrameworkElement.См. http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.aspx (см. Примечания) для получения подробной информации о том, что FrameworkElement добавляет к UIElement.Вот что говорится о логических деревьях:

Логическое дерево: Общая модель программирования WPF часто выражается в виде дерева элементов.Поддержка выражения дерева элементов в виде логического дерева и сопутствующая поддержка определения этого дерева в разметке реализована на уровне FrameworkElement.Однако обратите внимание, что FrameworkElement намеренно не определяет модель содержимого и оставляет эту ответственность за производные классы.Для получения дополнительной информации см. Деревья в WPF .

.
...