0

いくつかのプロパティにバインドされたカスタムコントロールがあり、スタイルを分離したいのですが、問題が発生しています。基本的には、ContentControlが内部にあるボタンです。ButtonスタイルはPropertyA(bool)に依存しますが、ContentControlsスタイルはPropertyAとPropertyB(5つの要素を持つ列挙型)に依存します。

<Button Style="{Binding PropertyA, Converter={StaticResource styleSelector}}">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            [...]
            <ContentControl x:Name="cc1">
                <ContentControl.Template>
                    <MultiBinding Converter="{StaticResource contentSelector}">
                        <Binding Path="PropertyA" />
                        <Binding Path="PropertyB" />
                     </MultiBinding>
                 </ContentControl.Template>
            </ContentControl>
            [...]
        </ControlTemplate>
    </Button.Template>
</Button>

スタイルはリソースに移動しました

<Style x:Key="ButtonStyleA1" TargetType="Button">
   [...]
</Style>

<Style x:Key="ButtonStyleA2" TargetType="Button">
   [...]
</Style>

ButtonStyleA1ContentControlはButtonの一部であるため、ContentControlのテンプレートをPropertyBに移動し、PropertyBへの依存関係をButtonStyleA2減らすことができるはずです。スタイルで使用しようとし<Setter ... TargetName="cc1">ましたが、コンパイラがcc1を見つけられません。バインディングがボタンに残るシンプルでクリーンなソリューションのアイデアはありますか?

どうもありがとう!

4

1 に答える 1

0

最も簡単な方法はControlTemplate、Button スタイル内から Button のプロパティを設定することです。次に、ボタンのスタイルを必要な数だけ定義できます。各スタイルには、 PropertyAControlTemplateの値に基づいて選択された独自のスタイルが含まれます。

各 ControlTemplate では、スタイル トリガーを使用して、コンテンツ コントロールの Template を 5 つのうちの 1 つに設定できます。コンテンツ コントロールのテンプレートは、整理方法に応じて、ボタンのリソースとして、ControlTemplateまたは別の場所に定義できます。

問題が解決したことを願っています。これがあなたのケースに役立ちます..

編集:

ContentControlコード ビハインドからアクセスする必要がある場合は、そのためにテンプレート パーツを定義できます。

于 2013-03-01T10:36:11.537 に答える