13

ビジュアルツリーから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;
   }
}

明らかに、これは非常に柔軟なソリューションではなく、一般的なものでもありません。誰かがビジュアルツリーから要素を削除するためのより一般的なアプローチを提案できますか?

4

1 に答える 1

7

もっと簡単な方法はないと思います。実際、それを行う簡単な一般的な方法はありません。WPFは非常に柔軟性があり、3人の子がカスタムテンプレートを使用して3つの異なる場所に表示するテンプレートを使用してカスタムコントロールを作成できます。

あなたが最善を尽くすことができるのは、すべての基本的なコントロールを考慮に入れて、それらをあなたのif-elseはしごに含めることです。これらはPanel、、、、BorderなどContentControlですItemsControl

于 2010-12-09T10:00:43.627 に答える