我创建了一个按钮。我的基本要求是圆形较粗的边框,有多种颜色(即买/卖按钮)
我希望我可以创建一次模板,而不是像这样覆盖边框画笔:
<Style x:Key="BorderButton">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderThickness="2"
BorderBrush="Red"
CornerRadius="3"
Background="{x:Null}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="GreenBorderButton" BasedOn="{StaticResource BorderButton}" TargetType="{x:Type Button}">
<Setter Property="BorderBrush" Value="Green" />
</Style>
但它们都产生相同的风格。 我每次都需要写出整个模板吗?看似不必要的代码重复(特别是如果需要3-4种颜色)。希望有一些方法可以继承模板。
答案 0 :(得分:2)
您的代码非常接近工作;问题是GreenBorderButton将BorderBrush应用于按钮本身,而不是被覆盖模板中的Border。
要解决此问题,只需更改Border的BorderBrush即可使用父Button的BorderBrush。您可以使用TemplateBinding执行此操作,如下所示:
<Style x:Key="BorderButton">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border"
BorderThickness="2"
BorderBrush="{TemplateBinding Property=BorderBrush}"
CornerRadius="3"
Background="{x:Null}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后,您可以使用与您相同的覆盖样式,也可以只执行以下操作:
<Button Style="{StaticResource BorderButton}" BorderBrush="Blue" Content="Blue" />