0

次のようなスタイルがあるとします。

<Style TargetType="{x:Type ScrollBar}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollBar}">
                <Grid x:Name="Bg" Background="Grey">

                    <!-- Non-Relevant Stuff Here -->

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

スクロールバーが無効になっているときは、グリッドの背景を赤くしたいです。私はこれを行うことができます:

<Style TargetType="{x:Type ScrollBar}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollBar}">
                <Grid x:Name="Bg" Background="Grey">

                    <!-- Non-Relevant Stuff Here -->

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
          <Setter Property="Template">
            <Setter.Value>
               <ControlTemplate TargetType="{x:Type ScrollBar}">
                   <Grid x:Name="Bg" Background="Red">

                       <!-- Non-Relevant Stuff Here -->

                   </Grid>
               </ControlTemplate>
           </Setter.Value>
        </Trigger>
    </Style.Triggers>
</Style>

しかし、それは私のテンプレートをすべて複製します。そのため、変更は 2 か所で行う必要があります。

このトリガーを取得して、テンプレートのグリッドの背景だけを変更できるようにするにはどうすればよいですか?

(注: 実際の ScrollBar の Background プロパティに Setter を追加しても効果はありません。)

4

2 に答える 2

2

背景の値を別の場所 (通常はコントロールのプロパティ) から取得するには、テンプレートに手を差し伸べる必要があります。例えば:

<Grid x:Name="Bg" Background="{TemplateBinding Background}">

次に、代わりにスタイル トリガーを単にBackgroundプロパティを変更できます。

<Setter Property="Background" Value="Gray"/>

スタイルの背景にデフォルト値を設定することもできます。したがって、次のような結果になります。

<Style TargetType="{x:Type ScrollBar}">
    <Setter Property="Background" Value="Gray"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollBar}">
                <Grid x:Name="Bg" Background="{TemplateBinding Background}">

                    <!-- Non-Relevant Stuff Here -->

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>
于 2013-03-22T21:18:21.193 に答える
1

TriggerControlTemplate代わりに を入れてStyleください:

<Style TargetType="{x:Type ScrollBar}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollBar}">
                <Grid x:Name="Bg" Background="Grey">

                    <!-- Non-Relevant Stuff Here -->

                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                      <Setter TargetName="Bg" Property="Template" Value="Red"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2013-03-23T01:44:16.410 に答える