ビジュアルツリーから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);
}
問題は、FrameworkElementのParentプロパティが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;
}
}
明らかに、これは非常に柔軟なソリューションではなく、一般的なものでもありません。誰かがビジュアルツリーから要素を削除するためのより一般的なアプローチを提案できますか?