FrameworkElement.RemoveLogicalChild(Object) Metoda

Definice

Odebere zadaný objekt z logického stromu tohoto prvku. FrameworkElement aktualizuje nadřazené ukazatele logického stromu, aby se s tímto odstraněním synchronizovaly.

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)

Parametry

child
Object

Prvek, který chcete odebrat.

Příklady

Následující příklad implementuje Child vlastnost na vlastní FrameworkElement , která provádí vlastní implementaci vizuální vrstvy. Setter vlastnosti je navržen tak, aby při změně hodnoty byla stará hodnota odebrána z logického stromu a také kolekce vizuálů specifická pro třídu. Hodnoty se ukládají do mezipaměti a pak se nová hodnota přidá do standardního logického stromu architektury WPF i do vlastní kolekce vizuálů.

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

Poznámky

Tuto metodu použijte pro implementaci kolekcí na objekty, které představují logické podřízené položky elementu. To může být provedeno v getters nebo setters, třídy obslužné Changed rutiny událostí, konstruktory nebo v rámci samotných typů kolekce.

Pro autory ovládacích prvků není manipulace s logickým stromem na této úrovni doporučeným postupem, pokud není vhodný žádný z poskytnutých modelů obsahu základní třídy řízení. Zvažte podtřídy na úrovni ContentControl, ItemsControla HeaderedItemsControl. Tyto třídy poskytují model obsahu s konkrétním vynucováním logických podřízených objektů prostřednictvím vyhrazených rozhraní API a také podporu pro další funkce, které jsou obvykle žádoucí v ovládacím prvku WPF, jako je styling prostřednictvím šablon.

Platí pro

Viz také