继承/覆盖WPF样式

时间:2010-09-20 13:51:08

标签: wpf

我为切换按钮创建了样式,定义如下:

<Style TargetType="{x:Type ToggleButton}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ToggleButton}">
        <Border HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="border" Padding="5,5,5,5" CornerRadius="5" Background="#FFBFACAC" BorderBrush="#FF000000" BorderThickness="1,1,1,1" SnapsToDevicePixels="True">
          <ContentPresenter x:Name="contentPresenter"/>
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsChecked" Value="true">
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="Background" TargetName="border">
              <Setter.Value>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                  <GradientStop Color="#FF36587C" Offset="0.5"/>
                  <GradientStop Color="#FF122F53" Offset="1"/>
                </LinearGradientBrush>
              </Setter.Value>
            </Setter>
          </Trigger>
          <Trigger Property="IsChecked" Value="false">
            <Setter Property="Foreground" Value="Black"/>
            <Setter Property="Background" TargetName="border">
              <Setter.Value>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                  <GradientStop Color="LightGray" Offset="0.5"/>
                  <GradientStop Color="White" Offset="1"/>
                </LinearGradientBrush>
              </Setter.Value>
            </Setter>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

我有多个切换按钮,但我想要一种方法来改变它们的边角半径。例如,我希望只有右边角的按钮可以是圆角,有些则没有圆角。

我是否需要为我需要的每种类型的舍入重新创建整个样式,其中每种样式的唯一区别是以下行?

    <Border HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="border" Padding="5,5,5,5" CornerRadius="5" Background="#FFBFACAC" BorderBrush="#FF000000" BorderThickness="1,1,1,1" SnapsToDevicePixels="True">

由于圆角是控制模板的一部分,我不认为我能以某种方式改变新模式中的一部分模板而不包括所有模板,但我不确定。

感谢。

2 个答案:

答案 0 :(得分:2)

您需要创建整个样式才能更改控件模板的一部分。我建议将它放入一个资源字典中,您可以将其合并为窗口的一部分,以保持窗口(或控件)XAML更清洁。

一种简单的方法是使用Blend - 添加所需的控件并右键单击它,然后选择“编辑模板”,以编辑模板的副本。

答案 1 :(得分:0)

另一种方法是创建一个自定义控件,继承自ToggleButton。

然后,您可以拥有一个名为CornerRadius的属性,并在该类的通用模板中,对此属性执行TemplateBinding。

如果您计划在项目中使用“很多”,并且有许多变体,那么可能需要使用自定义控件。如果您想进一步自定义,它还允许您稍后扩展属性数。