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 намеренно запечатывают метод .