FrameworkElement.AddLogicalChild(Object) Metod

Definition

Lägger till det angivna objektet i det logiska trädet för det här elementet.

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)

Parametrar

child
Object

Underordnat element som ska läggas till.

Exempel

I följande exempel implementeras en Child egenskap på en anpassad FrameworkElement som utför en egen implementering av det visuella lagret. Egenskapsuppsättningen är utformad så att om värdet ändras tas det gamla värdet bort från det logiska trädet samt en klassspecifik visuell samling. Egenskapsvärdet cachelagras och sedan läggs det nya värdet till i både det logiska trädet och den anpassade visuella samlingen.

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

Kommentarer

Använd den här metoden för implementering av samlingar på objekt som representerar logiska underordnade element i ett element. Insamlingsunderhåll för underordnade elementsamlingar kan utföras i egenskapsmottagare eller uppsättningar, klasshantering av ändrade händelser, konstruktorer eller inom själva samlingstyperna.

För kontrollförfattare är det inte rekommenderat att ändra det logiska trädet på den här nivån, såvida inte ingen av innehållsmodellerna för tillgängliga baskontrollklasser är lämpliga för ditt kontrollscenario. Överväg att underklassa på nivån ContentControl, ItemsControloch HeaderedItemsControl. Dessa klasser tillhandahåller en innehållsmodell med särskild tillämpning av logiska underordnade trädelement via dedikerade API:er, samt stöd för andra funktioner som vanligtvis är önskvärda i en WPF kontroll, till exempel formatering via mallar. Mer information om hur du använder LogicalChildren och AddLogicalChild finns i Trees i WPF.

AddLogicalChild kan utlösa ett undantag om det anropas vid en tidpunkt då det logiska trädet itereras av en annan process.

Gäller för

Se även