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, например стилизации с помощью шаблонов.

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

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