FrameworkElement.RemoveLogicalChild(Object) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Удаляет предоставленный объект из логического дерева этого элемента. FrameworkElement обновляет затронутые указатели в логическом дереве для синхронизации с данным удалением.
protected public:
void RemoveLogicalChild(System::Object ^ child);
protected internal void RemoveLogicalChild (object child);
member this.RemoveLogicalChild : obj -> unit
Protected Friend Sub RemoveLogicalChild (child As Object)
Параметры
- child
- Object
Подлежащий удалению элемент.
Примеры
В следующем примере реализуется Child
свойство в пользовательском FrameworkElement объекте, который выполняет собственную реализацию визуального слоя. Метод задания свойства разработан таким образом, чтобы при изменении значения старое значение было удалено из логического дерева, а также из визуальной коллекции, относящуюся к классу. Значения кэшируются, а затем новое значение добавляется как в логическое дерево уровня стандартной платформы WPF, так и в настраиваемую коллекцию визуальных элементов.
public virtual UIElement Child
{
get
{
return _child;
}
set
{
if (_child != value)
{
//need to remove old element from logical tree
if (_child != null)
{
OnDetachChild(_child);
RemoveLogicalChild(_child);
}
_vc.Clear();
if (value != null)
{
//add to visual
_vc.Add(value);
//add to logical
AddLogicalChild(value);
}
//always add the overlay child back into the visual tree if its set
if (_overlayVisual != null)
_vc.Add(_overlayVisual);
//cache the new child
_child = value;
//notify derived types of the new child
if (value != null)
OnAttachChild(_child);
InvalidateMeasure();
}
}
}
<System.ComponentModel.DefaultValue(GetType(Object), Nothing)>
Public Overridable Property Child() As UIElement
Get
Return _child
End Get
Set(ByVal value As UIElement)
If _child IsNot value Then
'need to remove old element from logical tree
If _child IsNot Nothing Then
OnDetachChild(_child)
RemoveLogicalChild(_child)
End If
_vc.Clear()
If value IsNot Nothing Then
'add to visual
_vc.Add(value)
'add to logical
AddLogicalChild(value)
End If
'always add the overlay child back into the visual tree if its set
If _overlayVisual IsNot Nothing Then
_vc.Add(_overlayVisual)
End If
'cache the new child
_child = value
'notify derived types of the new child
If value IsNot Nothing Then
OnAttachChild(_child)
End If
InvalidateMeasure()
End If
End Set
End Property
Комментарии
Используйте этот метод для реализации коллекций объектов, представляющих логические дочерние элементы элемента. Это может быть сделано в методах получения или заданиях свойств, обработчиках Changed
классов событий, конструкторов или в самих типах коллекций.
Для авторов элементов управления управление логическим деревом на этом уровне не рекомендуется, если ни одна из указанных моделей содержимого базового класса управления не подходит. Рассмотрите возможность подклассов на уровне ContentControl, ItemsControlи HeaderedItemsControl. Эти классы обеспечивают модель содержимого с определенным применением логических дочерних элементов через выделенные API, а также поддержку других функций, как правило, желательно в элементе управления WPF, например стилизации с помощью шаблонов.