2009-10-07 9 views
5

Je l'ai fait de cette façon:Comment changer modèle de contrôle de Style.Triggers

<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> 

Y at-il une meilleure façon de le faire? J'ai des scénarios où mon modèle de contrôle a plus de lignes de code, et j'ai seulement besoin de changer un seul style comme BorderBrush ou quelque chose. Comment puis-je changer le modèle de contrôle de Style.Triggers efficacement?

Répondre

4

Si votre intention est simplement de donner un arrière-plan différent à la bordure. Vous pouvez réaliser ceci dans le 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> 
+0

Oops! Je ne savais pas que ControlTemplate avait aussi des Triggers. Cool :-) – Raj

+7

Et s'il voulait un modèle complètement différent pour son contrôle? –