FrameworkElement.AddLogicalChild(Object) Metoda

Definicja

Dodaje podany obiekt do drzewa logicznego tego elementu.

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)

Parametry

child
Object

Element podrzędny do dodania.

Przykłady

Poniższy przykład implementuje Child właściwość na niestandardowym FrameworkElement , który wykonuje własną implementację warstwy wizualnej. Zestaw właściwości został zaprojektowany tak, aby w przypadku zmiany wartości stara wartość została usunięta z drzewa logicznego, a także kolekcji wizualizacji specyficznej dla klasy. Wartość właściwości jest buforowana, a następnie nowa wartość jest dodawana zarówno do drzewa logicznego, jak i kolekcji wizualizacji niestandardowych.

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

Uwagi

Ta metoda służy do implementacji kolekcji na obiektach reprezentujących logiczne elementy podrzędne elementu. Konserwacja kolekcji dla kolekcji elementów podrzędnych może odbywać się w programach pobierających lub ustawiających właściwości, obsłudze klas zdarzeń zmienionych, konstruktorów lub samych typów kolekcji.

W przypadku autorów kontrolek manipulowanie drzewem logicznym na tym poziomie nie jest zalecaną praktyką, chyba że żadne z modeli zawartości dostępnych klas kontrolek podstawowych nie jest odpowiednie dla danego scenariusza sterowania. Rozważ podklasy na poziomie ContentControl, ItemsControli HeaderedItemsControl. Te klasy zapewniają model zawartości ze szczególnym wymuszaniem logicznych elementów podrzędnych drzewa za pośrednictwem dedykowanych interfejsów API, a także obsługę innych funkcji zwykle pożądanych w kontrolce WPF, takiej jak stylowanie za pomocą szablonów. Aby uzyskać więcej informacji na temat używania LogicalChildren i AddLogicalChild, zobacz Drzewa w WPF.

AddLogicalChild Może zgłosić wyjątek, jeśli jest wywoływany w czasie, gdy drzewo logiczne jest iterowane przez inny proces.

Dotyczy

Zobacz też