2009-08-15 6 views
1

Ich habe einen Stil für eine GlassButton. Das Problem ist, dass die Farbverläufe im Stil erstellt werden und die Farben in den Farbverläufen eingestellt werden. Jetzt habe ich einen Rahmen für einen Knopf, den ich mag, aber ich brauche verschiedene Knöpfe, um verschiedene Farben zu haben. Gibt es eine Möglichkeit, dass ich eine oder mehrere der Farbeigenschaften des Stils "freilegen" kann, um sie in meinen Button-Implementierungen zu überschreiben? Stil unten:WPF - Override Stil Farben, Best Practice

Und wenn nicht, was ist dann die beste Vorgehensweise, um so etwas zu tun? Ich möchte nicht für jede Farbe verschiedene Stile erstellen müssen, z. „GlassButtonBlue, GlassButtonGreen, GlassButtonRed“ - scheint übertrieben ...

<Style x:Key="GlassButton" TargetType="{x:Type Button}"> 
    <Setter Property="FontSize" Value="42" /> 
    <Setter Property="Foreground" Value="White" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border x:Name="ButtonBorder" 
          CornerRadius="25,25,25,25" 
          BorderThickness="4,4,4,4" 
          Background="CadetBlue" 
          BorderBrush="#99FFFFFF" 
          RenderTransformOrigin="0.5,0.5"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="*"/> 
          <RowDefinition Height="2.6*"/> 
         </Grid.RowDefinitions> 
         <Border Grid.Row="0" CornerRadius="23,23,0,0"> 
          <Border.Background> 
           <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> 
            <GradientStop x:Name="test" Color="#08FFFFFF" Offset="0"/> 
            <GradientStop Color="#88FFFFFF" Offset="1"/> 
           </LinearGradientBrush> 
          </Border.Background> 
         </Border> 
         <ContentPresenter x:Name="ButtonContentPresenter"        
          VerticalAlignment="Center" 
          Grid.RowSpan="2" 
          HorizontalAlignment="Center"/> 
        </Grid> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter Property="RenderTransform" TargetName="ButtonBorder"> 
          <Setter.Value> 
           <TransformGroup> 
            <ScaleTransform ScaleX="0.9" ScaleY="0.9"/> 
           </TransformGroup> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Antwort

2

Dieser Fall eine gute Verwendung für attached properties demonstriert, die auf Ihrem GlassButton Kontrolle definiert werden kann (von Button in Wirklichkeit getippt), so dass die Werte in Ihrem XAML kann an sie binden. Eine einfache Template-Bindung ({TemplateBinding MyAttachedProperty}) sollte die Aufgabe erledigen.

Geben Sie das und lassen Sie mich wissen, wenn Sie Hilfe in bestimmten Teilen benötigen.

+0

Danke ... Ich schaute kurz, aber da es Code beinhaltet, glaube ich nicht, dass ich gerade Zeit habe ... werde später am Wochenende zurückkommen ... – LSTayon