Как изменить шаблон управления из Style.Triggers - PullRequest
6 голосов
/ 07 октября 2009

Я сделал это так:

    <Style x:Key="Button" BasedOn="{StaticResource LoginButton}" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid>
                    <Border CornerRadius="4">
                        <Border.Background>
                            <LinearGradientBrush EndPoint="0,1">
                                <GradientStop Offset="0" Color="#0863a5" />
                                <GradientStop Offset="1" Color="#00457d" />
                            </LinearGradientBrush>
                        </Border.Background>
                    </Border>
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid>
                            <Border CornerRadius="4">
                                <Border.Background>
                                    <LinearGradientBrush EndPoint="0,1">
                                        <GradientStop Offset="0" Color="#508fbd" />
                                        <GradientStop Offset="1" Color="#397ab0" />
                                    </LinearGradientBrush>
                                </Border.Background>
                            </Border>
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

Есть ли лучший способ сделать это? У меня есть сценарии, в которых мой шаблон управления содержит больше строк кода, и мне нужно всего лишь изменить один стиль, такой как BorderBrush или что-то в этом роде. Как эффективно изменить шаблон элемента управления из Style.Triggers?

1 Ответ

4 голосов
/ 07 октября 2009

Если ваше намерение состоит в том, чтобы просто дать другой фон для границы. Вы можете добиться этого в ControlTemplate.Triggers

<Style x:Key="Button" BasedOn="{StaticResource LoginButton}" TargetType="Button">
  <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate >
        <Grid>
              <Border x:Name="brd" CornerRadius="4">
                    <Border.Background>
                        <LinearGradientBrush EndPoint="0,1">
                            <GradientStop Offset="0" Color="#0863a5" />
                            <GradientStop Offset="1" Color="#00457d" />
                        </LinearGradientBrush>
                    </Border.Background>
                </Border>
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
       </Grid>
       <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Background" TargetName="brd">
                <Setter.Value>
                    <LinearGradientBrush EndPoint="0,1">
                     <GradientStop Offset="0" Color="#508fbd" />
                     <GradientStop Offset="1" Color="#397ab0" />
                    </LinearGradientBrush>
                </Setter.Value>
                </Setter>
            </Trigger>
         </ControlTemplate.Triggers>
       </ControlTemplate>
       </Setter.Value>
     </Setter>
 </Style>
...