2010-12-09 6 views
12

Ich möchte ein FrameworkElement aus der visuellen Struktur entfernen. Da die Framework eine Parent-Eigenschaft hat, wäre es offensichtlich, dieses Problem zu lösen, indem es von dort zu entfernen:Entfernen eines Elements aus dem visuellen Baum auf eine allgemeine Weise

FrameworkElement childElement; 
if(childElement != null && childElement.Parent != null) // In the visual tree 
{ 
    // This line will, of course not complie: 
    // childElement.Parent.RemoveFromChildren(childElement); 
} 

Das Problem ist, dass die Parent-Eigenschaft von Framework DependencyObject ist, die keine Ahnung von Kindern haben. Das einzige, was kann ich über dieses Problem sehe gehen ist die Mutter über Gießen zu sehen, ob es eine Grenze ist, Tafel usw. (Elemente, die Idee der Kinder haben), und entfernen Sie es von dort:

FrameworkElement childElement; 
if(childElement != null && childElement.Parent != null) // In the visual tree 
{ 
    if(childElement.Parent is Panel) 
    { 
    (childElement.Parent as Panel).Children.Remove(childElement); 
    } 
    if(childElement.Parent is Border) 
    { 
    (childElement.Parent as Border).Child = null; 
    } 
} 

Offensichtlich ist dies nicht eine sehr flexible Lösung und überhaupt nicht generisch. Kann jemand einen allgemeineren Ansatz zum Entfernen eines Elements aus dem visuellen Baum vorschlagen?

Antwort

6

Ich glaube nicht, dass es einen einfacheren Weg gibt. Eigentlich kann es keinen einfachen generischen Weg geben, dies zu tun. WPF ist sehr flexibel und Sie können ein benutzerdefiniertes Steuerelement mit einer Vorlage erstellen, die drei untergeordnete Elemente an drei verschiedenen Orten mit benutzerdefinierten Vorlagen anzeigen lässt.

Was Sie am besten können, ist, berücksichtigen Sie alle grundlegenden Kontrollen und enthalten sie in Ihnen if-else Leiter. Diese sind Panel, Border, ContentControl, ItemsControl usw.

+0

Schade, es gibt keine allgemeinen Schnittstellen für Gegenstände mit Kindern. Danke für die Liste, ich habe nicht an ContentControl oder ItemsControl gedacht ... jetzt reicht das! –

+3

@Gergely: Ich stieß auf einen Artikel auf MSDN über Inhaltsmodell in WPF. Ich denke, dass dies für Sie nützlich sein könnte. http://msdn.microsoft.com/library/bb613548.aspx – decyclone

Verwandte Themen