Прочитать на английском

Поделиться через


FrameworkElement.OnVisualParentChanged(DependencyObject) Метод

Определение

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

C#
protected internal override void OnVisualParentChanged(System.Windows.DependencyObject oldParent);

Параметры

oldParent
DependencyObject

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

Комментарии

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

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

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

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

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

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

Продукт Версии
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

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