1

XAML のリソース セクションで定義されたテンプレートを使用するカスタム コントロールを作成しており、実行時にコントロールのインスタンスの 1 つまたは複数のテンプレート パーツを置き換えたいと考えています。

たとえば、コントロールのテンプレートに「ActivePart」という名前のパーツがある場合、コントロールのインスタンスにある ActivePart の FrameworkElement を新しい FrameworkElement に置き換えるにはどうすればよいですか?

Control.Template プロパティが書き込み可能であることは認識していますが、テンプレート全体を新しく作成するよりも、そのテンプレートの特定の部分を置き換える方法を見つけたいと思いますが、適切な名前付き部分を置き換えることで既存のテンプレートを編集するソリューションは受け入れられる。

私は C# を使用しており、FrameworkElement を使用して実行時にこれを行う必要があるため、XAML ベースのソリューションや提案は探していません。

PS GetTemplateChild() がコントロール インスタンス内の名前付きテンプレート パーツの FrameworkElement を返すことは知っていますが、それがそのパーツを新しい FrameworkElement に置き換えるのにどのように役立つかわかりません。

4

1 に答える 1

1

私は明らかなことを見逃していたと思います!

派生コントロールで OnApplyTemplate が呼び出された、VisualTreeHelper.GetChild (this, 0) は、インスタンス化されたテンプレートのビジュアル ツリーのルート オブジェクトを返します。このオブジェクトから、Children コレクションを使用できます (コントロールのテンプレートが Panel 派生の場合、Canvas など)。グリッドなど) を使用して、子テンプレート パーツを自由に追加/削除/変更します。

OnApplyTemplate が呼び出される前は、コントロールのビジュアル ツリーは存在せず、VisualTreeHelper.GetChildrenCount は 0 を返します。

于 2010-01-11T10:37:38.980 に答える