Я хотел бы удалить FrameworkElement из визуального дерева. Поскольку FrameworkElement имеет свойство Parent, было бы очевидно решить эту проблему, удалив ее оттуда:
FrameworkElement childElement;
if(childElement != null && childElement.Parent != null) // In the visual tree
{
// This line will, of course not complie:
// childElement.Parent.RemoveFromChildren(childElement);
}
Проблема заключается в том, что свойство Parent в FrameworkElement имеет DependencyObject, который не имеет представления о дочерних элементах. Таким образом, единственное, что я могу увидеть, решая эту проблему, - приведение Родителя, чтобы увидеть, является ли это Границей, Панелью и т. Д. (Элементами, имеющими представление о дочерних элементах), и удалить его оттуда:
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;
}
}
Очевидно, что это не очень гибкое решение и не общее. Может ли кто-нибудь предложить более общий подход к удалению элемента из визуального дерева?