FrameworkElement.AddLogicalChild(Object) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.