2013-05-02 1 views
0

У меня есть простой стиль с ControlTemplate OrangeButton, и я создал другой стиль OrangeButton2 BasedOn OrangeButton. Я пытаюсь изменить свойства границы, но WPF не отображает новый стиль границы, определенный в OrangeButton2. Я также попробовал обратное, где OrangeButton основан на OrangeButton2, без изменений. Любая идея, что на самом деле происходит здесь, и как сделать ее правильной.Как изменить настройки базового стиля из производных настроек с использованием свойства BasedOn

<Style x:Key="OrangeButton" TargetType="Button" > 
     <Setter Property="OverridesDefaultStyle" Value="True"/> 
     <Setter Property="Margin" Value="2"/> 
     <Setter Property="FontFamily" Value="Verdana"/> 
     <Setter Property="FontSize" Value="11px"/> 
     <Setter Property="FontWeight" Value="Bold"/> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
      <Border Name="border" 
       BorderThickness="1" 
       Padding="4,2" 
       BorderBrush="DarkGray" 
       CornerRadius="3" 
       Background="{TemplateBinding Background}"> 
       <Grid > 
       <ContentPresenter HorizontalAlignment="Center" 
            VerticalAlignment="Center" Name="contentShadow" Style="{StaticResource ShadowStyle}"> 
       </ContentPresenter> 
       <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Name="content"/> 
       </Grid> 
      </Border>     
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 

    <Style x:Key="OrangeButton2" TargetType="Button" BasedOn="{StaticResource OrangeButton}"> 
     <Setter Property="BorderBrush" Value="Red"></Setter> 
     <Setter Property="BorderThickness" Value="1"></Setter> 
    </Style> 
    </Window.Resources> 

    <StackPanel HorizontalAlignment="Center"> 
    <Button Style="{StaticResource OrangeButton2}">Hello</Button>  
    </StackPanel> 
+0

Вы можете уменьшить XAML до двух важных стилей, чтобы улучшить читаемость. – MatthiasG

ответ

1

Это не достаточно, чтобы определить BorderBrush, вы должны будете использовать его. В вашем ControlTemplate изменения

<Border Name="border" 
    BorderThickness="1" 
    Padding="4,2" 
    BorderBrush="DarkGray" 
    CornerRadius="3" 
    Background="{TemplateBinding Background}"> 

к

<Border Name="border" 
    BorderThickness="{TemplateBinding BorderThickness}" 
    Padding="4,2" 
    BorderBrush="{TemplateBinding BorderBrush}" 
    CornerRadius="3" 
    Background="{TemplateBinding Background}"> 

Это будет использовать значение вы определяете для Style.

+0

Что произойдет, если OrangeButton происходит от OrangeButton2, а не – skjagini

+0

. Результат будет заключаться в том, что OrangeButton2 будет использовать шаблон кнопки .NET по умолчанию, а OrangeButton переопределит его с измененным стилем. Чего вы хотите достичь? – MatthiasG

+0

Мне нужно изменить свойство границы OrangeButton, не изменяя его. Я пытаюсь сделать это программно, поэтому я могу сделать стиль OrangeBUtton проистекающим из другого стиля или создать новый стиль, который происходит от OrangeButton. У меня много контрольных шаблонов, поэтому изменение каждого из них сейчас не вариант. – skjagini