2009-08-15 64 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 2009-08-15 18:31:38