2

WPF 用のカスタム ユーザー コントロールをいくつか作成しています。このユーザー コントロールにはカスタムの依存関係プロパティが含まれているため、デザイナーで入力できます。

このプロパティの 1 つは「InnerUserControlType」と呼ばれます。この依存関係プロパティは、TextBox、ComboBox、Label、CheckBox などの値を含むカスタム列挙です。

デザイナーの XAML ページでこのプロパティを設定し、プロパティに応じてユーザー コントロールが表示される内部コントロールを変更できるようにしたいと考えています。

これをどのように実装すればよいですか?ユーザー コントロールの内部コントロールを含むグリッドは通常のフィールドであるため、静的メソッド プロパティ (依存関係プロパティなど) からアクセスすることはできません。

デザイナーが簡単に作業できるように、デザイナーで機能させたいです。

どうもありがとう!

4

1 に答える 1

0

をグリッドに配置し、相対ソース経由でプロパティをContentControlバインドしますContentUserControl

<ContentControl Content="{Binding RelativeSource={RelativeSource FindAnsector,
                                  AncestorType={x:Tyle myNamespace:MyControl}}}"

DataTemplateSelector値をチェックInnerUserControlTypeし、プロパティで要求されたコントロールを含む適切なデータ テンプレートを返す を作成します。

シナリオによっては、データ テンプレート内のコントロールに適切なデータ コンテキストがあることを確認する必要がある場合があります。コントロールのデータ コンテキストをユーザー コントロールと同じにする必要がある場合は、データ テンプレートのルート要素に、データ コンテキストの相対バインディングを追加します。次のようなもの (テキスト ボックス データ テンプレートの場合):

<TextBox DataContext="{Binding DataContext,
                               RelativeSource={RelativeSource FindAnsector,
                               AncestorType={x:Tyle myNamespace:MyControl}}}"
 ......
</TextBox>

編集:

wpf タグだけに気付き、Silverlight タグを見逃していました。Silverlight には...TemplateSelectorプロパティがないため、代わりにコンバーターを使用してください。

于 2012-05-22T11:00:02.503 に答える