2009-08-15 2 views
1

У меня есть стиль для GlassButton. Проблема заключается в том, что градиенты построены в стиле, а цвета задаются в градиентах. Теперь у меня есть рамка для кнопки, которая мне нравится, но мне нужны разные кнопки для разных цветов. Можно ли каким-либо образом «выставить» один или несколько свойств цвета из стиля для переопределения в моих реализациях кнопок? Стиль ниже:WPF - переопределить цвета стиля, передовая практика

А если нет, то что лучше всего для этого? Я не хочу создавать разные стили для каждого цвета, например. «GlassButtonBlue, GlassButtonGreen, GlassButtonRed» - кажется излишним ...

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

ответ

2

Этот случай демонстрирует хорошее применение attached properties, которая может быть определена на вашем GlassButton управления (типизированных Button в действительности), так что значения в вашем XAML может привязываться к ним. Простая привязка шаблона ({TemplateBinding MyAttachedProperty}) должна выполнять эту работу.

Дайте мне знать, если вам нужна помощь в определенных деталях.

+0

Спасибо ... Я посмотрел кратко, но поскольку он включает код, я не думаю, что у меня есть время прямо сейчас ... вернусь к этому позже в эти выходные ... – LSTayon

Смежные вопросы