Je souhaite supprimer un objet FrameworkElement de l'arborescence visuelle. Étant donné que le FrameworkElement possède une propriété Parent, il serait évident de résoudre ce problème en le retirant de là:Suppression d'un élément de l'arborescence visuelle de manière générique
FrameworkElement childElement;
if(childElement != null && childElement.Parent != null) // In the visual tree
{
// This line will, of course not complie:
// childElement.Parent.RemoveFromChildren(childElement);
}
Le problème est que la propriété Parent de FrameworkElement est de DependencyObject, qui n'a aucune notion d'enfants. La seule chose que je peux voir aller à ce problème est par la coulée du parent pour voir si elle est une bordure, panneaux, etc. (éléments qui ont notion d'enfants) et l'enlever de là:
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;
}
}
ce n'est évidemment pas une solution très flexible et pas générique du tout. Quelqu'un peut-il suggérer une approche plus générique pour supprimer un élément de l'arbre visuel?
Dommage qu'il n'y ait pas d'interfaces générales pour les articles avec des enfants. Merci pour la liste, je n'ai pas pensé à ContentControl ou ItemsControl ... pour le moment ça va faire! –
@Gergely: Je suis tombé sur un article sur MSDN à propos du modèle de contenu dans WPF. Je pense que cela pourrait vous être utile. http://msdn.microsoft.com/library/bb613548.aspx – decyclone