FrameworkElement.OnVisualParentChanged(DependencyObject) Метод

Определение

Вызывается при изменении родителя данного элемента в визуальном дереве. Переопределяет OnVisualParentChanged(DependencyObject).

protected public:
 override void OnVisualParentChanged(System::Windows::DependencyObject ^ oldParent);
protected internal override void OnVisualParentChanged (System.Windows.DependencyObject oldParent);
override this.OnVisualParentChanged : System.Windows.DependencyObject -> unit
Protected Friend Overrides Sub OnVisualParentChanged (oldParent As DependencyObject)

Параметры

oldParent
DependencyObject

Прежний родительский элемент. Может иметь значение null, чтобы показать, что ранее у элемента не было родительского элемента.

Комментарии

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

Примечания для тех, кто наследует этот метод

Реализация этого виртуального метода по умолчанию запрашивает новый родительский объект, создает различные события инициализации и устанавливает внутренние флаги для состояния инициализации соответствующего объекта FrameworkElement . Наконец, он вызывает последовательные базовые реализации, объявленные UIElement , что, в свою очередь, вызывает его основу в Visual . Всегда вызывайте базовую реализацию, чтобы сохранить это поведение, в противном случае поведение дерева элементов для этого элемента при объявлении в качестве дочернего для другого элемента может отличаться от ожидаемого.

Несколько существующих классов Windows Presentation Foundation (WPF) переопределяют этот метод, например: OnVisualParentChanged(DependencyObject) , OnVisualParentChanged(DependencyObject) . Наиболее распространенным сценарием является обеспечение того, что новый родительский элемент должен быть определенным типом. Это может привести к созданию исключения, если новый родительский элемент не удалось выполнить какой-либо способ проверки типа. Специализированная версия этого сценария существует в реализациях элементов списка и пунктов меню, которые не имеют смысла за пределами родительского визуального элемента, которому принадлежит соответствующая коллекция для хранения. Обратите внимание, что эти случаи не обязательно вызывают исключения, так как могут существовать сценарии конструктора, которые полагаются на элементы с переродителем, которые находятся в непостоянном виде, без "обычных" родителей.

Этот метод также переопределяется в некоторых элементах, которые обычно являются корневым элементом, например Window . Другой вариант — элементы, которые представляют собой видимый корневой элемент в разметке, но который автоматически создает большую инфраструктуру в скомпилированном логическом дереве (например, Page ). WindowРеализации и Page намеренно запечатывать метод.

Применяется к

См. также раздел