FrameworkElement.RemoveLogicalChild(Object) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.