Я хотел бы удалить элемент FrameworkE визуального дерева. Поскольку 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, который не имеет понятия о дочерних элементах. Так что единственное, что я вижу в этой проблеме, - это лить родителя, чтобы увидеть, есть ли он Border, Panel и т.д. (Элементы, которые имеют представление о дочерних элементах) и удалить его оттуда:
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;
}
}
Очевидно, что это не очень гибкое решение, а не общее. Может ли кто-нибудь предложить более общий подход к удалению элемента из визуального дерева?