3

複数の UI 要素をさまざまな状況でさまざまなタイミングで表示するカスタム WPF コントロールを作成しようとしているため、同じビジュアル ツリーで適切に作成することはできません。タイプ の各要素の依存関係プロパティを作成しましUIElementた。これはうまくいきました。

スタイリングのコントロールに関しては、うまく機能しませんでした。カスタム プロパティを設定するコントロールのスタイルを定義できますが、スタイルは一度だけインスタンス化されます。したがって、カスタム コントロールの複数のインスタンスが同じスタイルを使用している場合、最後に定義されたインスタンスのみがビジュアル ツリーを取得します。これは、スタイルがUIElementテンプレートを使用するのではなく直接設定するためであり、その中で定義されたツリーの複数のインスタンスを作成するのはテンプレート インフラストラクチャであるためだと理解しています ( https://stackoverflow.com/a/8702180/1453269を参照) 。

私の質問は、適用されるような方法で複数のテンプレートを取るコントロールを定義するにはどうすればよいですか? タイプ の依存オブジェクトを作成しようとしましDataTemplateた。を使用しContentPresenterてテンプレートを表示すると、DataTemplate の型名がテキストとして表示されるだけです。WPF の残りの部分と一貫性のある方法で、テンプレートの値を最初の依存関係プロパティに適用したいと考えています。WPF のテンプレート インフラストラクチャを活用する方法があると想定していましたが、その方法が見つかりません。

4

1 に答える 1

1

重要なのは、(DataTemplate が派生する) FrameworkTemplateのLoadContentメソッドです。このメソッドは、テンプレートのコンテンツのコピーを作成します。

そこで、複数のテンプレートを実装するために、必要なテンプレート化された UI プロパティごとに Content と Template の依存関係プロパティのペアを作成しました。XXXTemplate 依存関係プロパティの変更通知に登録しました。イベント ハンドラーは、一致する XXXContent 依存関係プロパティを、新しいテンプレート値で呼び出される LoadContent の戻り値に設定するメソッドを呼び出します。

コンテナー オブジェクトのコントロール テンプレートでは、目的の UIElement の XXXContent プロパティにバインドされた ContentPresenter を使用できます。

于 2012-11-02T06:18:20.633 に答える