2015-10-29 2 views
0

У меня есть стиль, который меняет внешний вид кнопки, эта кнопка может быть разных цветов, однако я делаю это, используя свойство basedOn и ссылаясь на стиль основной кнопки, но изменяя фон цвета. См ниже:WPF Стили: Styled BasedOn use global Цвет

<!--- Small Button Colours --> 
<Style BasedOn="{StaticResource ButtonIcoSmall}" TargetType="Button" x:Key="BtnSmGreen"> 
    <Style.Resources> 
     <SolidColorBrush Color="#FF5E8108" x:Key="colour1" /> 
     <SolidColorBrush Color="#FF5E8107" x:Key="colour2" /> 
     <SolidColorBrush Color="#FFA1D423" x:Key="colour3" /> 
    </Style.Resources> 
</Style> 

Однако я не переехал эти цвета нашего стиля и в глобальный SolidBrushColour тег, так что я могу использовать эти цвета в любом стиле, не вводя цвет снова, и чтобы сделать его проще изменить глобально.

<!-- Global Colour Scheme --> 

<!-- Green --> 
<SolidColorBrush Color="#FF8AB71C" x:Key="NorGreen" /> 
<SolidColorBrush Color="#FF5E8107" x:Key="DarGreen" /> 
<SolidColorBrush Color="#FFA1D423" x:Key="LigGreen" /> 

<!-- Grey --> 
<SolidColorBrush Color="#FF434953" x:Key="NorGrey" /> 
<SolidColorBrush Color="#FF22252b" x:Key="DarGrey" /> 
<SolidColorBrush Color="#FF58616E" x:Key="LigGrey" /> 

<!-- Blue --> 
<SolidColorBrush Color="#FF29A1D5" x:Key="NorBlue" /> 
<SolidColorBrush Color="#FF1F7297" x:Key="DarBlue" /> 
<SolidColorBrush Color="#FF36BBF5" x:Key="LigBlue" /> 

<!-- Red --> 
<SolidColorBrush Color="#FFEE4E10" x:Key="NorRed" /> 
<SolidColorBrush Color="#FFAA3C12" x:Key="DarRed" /> 
<SolidColorBrush Color="#FFFF6F37" x:Key="LigRed" /> 
<!-- Global Colour Scheme END --> 

Теперь, как я могу сослаться на глобальный цвет в моем стиле BasedOn, я попытался Colour="{StaticResource NorGreen} это не работает, я предполагаю, в связи с типом данных. Ниже стиль, который использует эти цвета упаковывают вы хотите взглянуть на что:

<Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <WrapPanel> 
         <Border Grid.Column="0" 
            CornerRadius="5 0 0 5" 
            BorderThickness="0" 
            Background="{DynamicResource colour1}" 
            Name="buttonIcon"> 
          <WrapPanel> 
           <ContentPresenter Grid.Column="0" 
                 HorizontalAlignment="Center" 
                 VerticalAlignment="Center" 
                 Margin="{TemplateBinding Margin}" /> 
          </WrapPanel> 
         </Border> 
         <Border Grid.Column="0" 
            CornerRadius="0 5 5 0" 
            BorderThickness="0" 
            Background="{DynamicResource colour2}" 
            Name="buttonText" > 
          <TextBlock Text="{TemplateBinding Tag}" 
                 FontSize="13" 
                 Foreground="White" 
                 Padding="{TemplateBinding Padding}" /> 
         </Border> 
        </WrapPanel> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" Value="{DynamicResource colour1}" TargetName="buttonText" /> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="True"> 
          <Setter Property="Background" Value="{DynamicResource colour3}" TargetName="buttonText" /> 
          <Setter Property="Background" Value="{DynamicResource colour3}" TargetName="buttonIcon" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

ответ

0

Сумел найти ответ, на самом деле довольно просто:/

Color="{Binding Source={StaticResource NorGreen}, Path=Color}"

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