FrameworkElement.AddLogicalChild(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.
Ajoute l'objet fourni à l'arborescence logique de cet élément.
protected public:
void AddLogicalChild(System::Object ^ child);
protected internal void AddLogicalChild (object child);
member this.AddLogicalChild : obj -> unit
Protected Friend Sub AddLogicalChild (child As Object)
Paramètres
- child
- Object
Élément enfant à ajouter.
Exemples
L’exemple suivant implémente une Child
propriété sur une application personnalisée FrameworkElement qui effectue son propre implémentation de couche visuelle. L’ensemble de propriétés est conçu afin que si la valeur change, l’ancienne valeur est supprimée de l’arborescence logique, ainsi qu’une collection visuelle spécifique à la classe. La valeur de la propriété est mise en cache, puis la nouvelle valeur est ajoutée à l’arborescence logique 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 éléments enfants logiques d’un élément. La maintenance des collections d’éléments enfants peut être effectuée dans les getters de propriétés ou les setters, la gestion des classes des événements modifiés, des 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 pour les classes de contrôle de base disponibles est approprié pour votre scénario de contrôle. Envisagez la sous-classe au niveau de ContentControl, ItemsControlet HeaderedItemsControl. Ces classes fournissent un modèle de contenu avec une application particulière des éléments enfants d’arborescence logique via des 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. Pour plus d’informations sur l’utilisation et AddLogicalChildl’utilisation LogicalChildren des arborescences dans WPF.
AddLogicalChild peut lever une exception si elle est appelée à la fois lorsque l’arborescence logique est itérée par un autre processus.