Как свойство Parent для FrameworkElement установлено в Silverlight? - PullRequest
4 голосов
/ 05 февраля 2009

Я написал собственный элемент управления Silverlight на основе Control. У меня есть два свойства DependencyProperties, названные Top и Bottom, которые оба содержат дочерние элементы управления для определенного отображения макета. Затем я использую ControlTemplate, чтобы расположить эти два элемента управления в сетке, поместив один в строку 0, а другой в 1 строку. У меня проблема в том, что я не могу понять, как заставить свойство Parent каждого дочернего элемента управления указывать на мой пользовательский элемент управления. Когда я проверяю каждый элемент управления во время выполнения, свойство Parent каждого равно null.

Это простой пример, но я думаю, вы видите общую проблему. У меня есть ряд более сложных элементов управления, которые все разделяют эту проблему. Я знаю, что есть какая-то магия, которую мне не хватает. Если свойство ContentControl установлено на некоторый дочерний объект, он каким-то образом устанавливает родительский объект этого дочернего элемента на себя.

Редактировать: Немного больше информации

В WPF можно использовать такие функции, как AddVisualChild (), RemoveVisualChild (), AddLogicalChild (), RemoveLogicChild () для управления родительскими и дочерними отношениями, но эти функции недоступны в Silverlight.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2009

После долгих исследований я считаю, что это невозможно. Мне удалось пройти через визуальное дерево вместо логического дерева, используя VisualTreeHelper для достижения моей конечной цели.

1 голос
/ 05 февраля 2009

Свойство Parent не может быть произвольным, оно отражает реальный родительский элемент управления для использования при рендеринге.

Из MSDN: Родитель может быть пустой ссылкой (Nothing в Visual Basic) в тех случаях, когда был создан экземпляр элемента, но не привязан ни к какому логическому дереву, которое в конечном итоге подключается к корневому элементу уровня страницы или объекту приложения.

...

Изменение родительского элемента обычно выполняется только путем манипулирования коллекциями, использования специальных методов добавления или удаления или установки свойств содержимого элементов.

...