3

私にはいくつかの要素があり、「X」の場合はすべて同じように見えるはずです。問題は、要素ごとに「X」が異なるため、共有スタイルを簡単に使用できないことです。でも、いずれの場合もセッターは同じなので、一か所にまとめたいと思います。どうすればそれを達成できますか?

より具体的には、私はこのコードを持っています:

<TextBlock Name="text1">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedMonth, Converter={conv:IsNullConverter}}"
                             Value="False">
                    <Setter Property="Background" Value="RoyalBlue" />
                    <!-- possibly other setters -->
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
<TextBlock Name="text2">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsSelected}" Value="True">
                    <Setter Property="Background" Value="RoyalBlue" />
                    <!-- possibly other setters, same ones as above -->
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

ここでは、2つSetterを共通の場所に配置して、常に1つずつ変更する必要がないようにします。それを行う方法はありますか?

コレクションをSetterまとめて、のようなものを使ってみDataTrigger.Setters="{StaticResource SharedSetters}"ました。これは機能しませんが、機能する場合は、まさに私が望むものになります。

4

2 に答える 2

3

まず、他のすべてのスタイルのベース(BasedOn属性)となる共通のスタイルを持つことができます。このスタイルには、カスタムのブール値が付加されたプロパティによって制御される通常のトリガーと、再利用するセッターが含まれます。次に、基本スタイルに基づく他のスタイルでは、DataTriggersはアタッチされたプロパティのみを設定し、基本スタイルに他のすべてのプロパティを設定させます。

IsSelectedタイプに添付プロパティを作成したとするとFoo、基本スタイルは次のようになります。

<Style x:Key="IsSelectedStyle" TargetType="TextBlock">
    <Style.Triggers>
        <Trigger Property="local:Foo.IsSelected" Value="True">
            <Setter Property="Background" Value="RoyalBlue" />
            <!-- possibly other setters -->
        </Trigger>
    </Style.Triggers>
</Style>

そして、あなたはそれをこのように使うでしょう:

<TextBlock>
    <TextBlock.Style>
        <Style TargetType="TextBlock" BasedOn="{StaticResource IsSelectedStyle}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsSelected}" Value="True">
                    <Setter Property="local:Foo.IsSelected" Value="True" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
于 2012-11-23T19:17:05.470 に答える
0

セッターの値を静的リソースに移動し、セッターにキーを設定します。

<SolidColorBrush x:Key="keyName" Color="RoyalBlue" />

<Setter Property="Background" Value="{StaticResource keyName}" />

あなたのコードで。

これで、「keyName」のブラシを変更でき、すべてのセッターに影響します。

于 2012-11-23T19:07:14.060 に答える