FrameworkElement.AddLogicalChild(Object) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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.