FrameworkElement.RemoveLogicalChild(Object) Méthode

Définition

Supprime l’objet fourni de l’arborescence logique de cet élément. FrameworkElement met à jour les pointeurs de parents de l’arborescence logique affectée pour qu’ils restent synchronisés avec cette suppression.

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)

Paramètres

child
Object

Élément à supprimer.

Exemples

L’exemple suivant implémente une Child propriété sur une implémentation personnalisée FrameworkElement qui effectue sa propre implémentation de couche visuelle. Le setter de la propriété est conçu pour que si la valeur change, l’ancienne valeur est supprimée de l’arborescence logique, ainsi qu’une collection visuelle spécifique à une classe. Les valeurs sont mises en cache, puis la nouvelle valeur est ajoutée à l’arborescence logique au niveau de l’infrastructure WPF standard et à la collection visuelle personnalisée.

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

Remarques

Utilisez cette méthode pour l’implémentation de collections sur des objets qui représentent des enfants logiques d’un élément. Cette opération peut être effectuée dans les getters de propriété ou les setters, les gestionnaires de classes d’événements Changed , les constructeurs ou dans les types de collection eux-mêmes.

Pour les auteurs de contrôles, la manipulation de l’arborescence logique à ce niveau n’est pas la pratique recommandée, sauf si aucun des modèles de contenu de la classe de contrôle de base fournis n’est approprié. Envisagez la sous-classification au niveau de ContentControl, ItemsControlet HeaderedItemsControl. Ces classes fournissent un modèle de contenu avec une application particulière des enfants logiques par le biais d’API dédiées, ainsi que la prise en charge d’autres fonctionnalités généralement souhaitables dans un contrôle WPF, comme le style par le biais de modèles.

S’applique à

Voir aussi