2009-10-07 10 views
5

ho fatto in questo modo:Come cambiare modello di controllo da 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> 

Esiste un modo migliore per fare questo? Ho scenari in cui il mio modello di controllo sta avendo più linee di codice e mi piacerebbe solo cambiare un singolo stile come BorderBrush o qualcosa del genere. Come posso cambiare il modello di controllo da Style.Triggers in modo efficiente?

risposta

4

Se la tua intenzione è solo quella di dare uno sfondo diverso al confine. È possibile ottenere ciò nel 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! Non sapevo che ControlTemplate avesse Trigger. Cool :-) – Raj

+7

e se volesse un modello completamente diverso per il suo controllo? –

Problemi correlati