Sdílet prostřednictvím


FrameworkElement.AddLogicalChild(Object) Metoda

Definice

Přidá zadaný objekt do logického stromu tohoto prvku.

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

Podřízený prvek, který se má přidat.

Příklady

Následující příklad implementuje Child vlastnost na vlastní FrameworkElement , která provádí vlastní implementaci vrstvy vizuálu. Setter vlastností je navržený tak, aby se při změně hodnoty odebrala stará hodnota z logického stromu a také kolekce vizuálů specifických pro třídu. Hodnota vlastnosti se vloží do mezipaměti a pak se nová hodnota přidá do logického stromu i do kolekce vlastních 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é prvky elementu. Údržba kolekcí pro kolekce podřízených elementů se může provádět v rutinách nebo setterech vlastností, zpracování tříd změněných událostí, konstruktorech 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 žádný z modelů obsahu pro dostupné základní třídy ovládacích prvků není vhodný pro váš scénář řízení. Zvažte podtřídy na úrovni ContentControl, ItemsControla HeaderedItemsControl. Tyto třídy poskytují model obsahu s konkrétním vynucováním podřízených prvků logického stromu prostřednictvím vyhrazených rozhraní API a také podporu dalších funkcí, které jsou obvykle žádoucí v ovládacích prvcích WPF, jako je styling prostřednictvím šablon. Další informace o používání LogicalChildren a AddLogicalChildnajdete v tématu Stromy ve WPF.

AddLogicalChild může vyvolat výjimku, pokud je volána v době, kdy je logický strom iteován jiným procesem.

Platí pro

Viz také