依存関係プロパティに基づいてコントロールを交換するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1608777

質問

カスタムコントロールを作成しています。

このコントロールのテンプレートでは、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>

同じプロパティで複数の値のトリガーを使用でき、各値が完全に異なるテンプレートを取得できることに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top