依存関係プロパティに基づいてコントロールを交換するにはどうすればよいですか?
-
05-07-2019 - |
質問
カスタムコントロールを作成しています。
このコントロールのテンプレートでは、CanExpandという依存関係プロパティの値に基づいてルートコントロールに異なるコントロールを使用する必要があります。 CanExpandは、カスタムコントロールクラスで定義されています。
CanExpandがtrueの場合、エキスパンダーを使用して表示したい:
<ControlTemplate ...>
<Expander ...>
<!--...-->
<ContentPresenter/>
</Expander>
</ControlTemplate>
CanExpandがfalseの場合、代わりにHeaderedContentControlを使用して表示します。
<ControlTemplate ...>
<HeaderedContentControl ...>
<!--...-->
<ContentPresenter/>
</HeaderedContentControl>
</ControlTemplate>
DataTemplateSelectorの使用を考えましたが、これはDataTemplateではなくControlTemplateであり、コントロールのテンプレートのセレクタープロパティはありません。
子コンテンツは1つのコントロールの下にしか存在できないため、トリガーを使用してさまざまなコントロールを表示/非表示に設定することはできません。また、トリガーを使用してContentプロパティを変更できるとは思いません。
提案はありますか
ありがとう。
解決
スタイル内で、デフォルトの状態のControlTemplateプロパティを設定してから、ControlTemplateプロパティを別のテンプレートに設定するトリガーを使用します。例:
<Style ...>
<Setter Property="ControlTemplate">
<ControlTemplate ...>
</ControlTemplate>
</Setter>
<Style.Triggers>
<Trigger Property="YourProperty" Value="WhateverValue">
<Setter Property="ControlTemplate">
<ControlTemplate ...>
</ControlTemplate>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
同じプロパティで複数の値のトリガーを使用でき、各値が完全に異なるテンプレートを取得できることに注意してください。
所属していません StackOverflow