我创建了一个按钮。我的基本要求是圆角较粗的边框,具有多种颜色(即用于购买/出售按钮)
我希望我可以创建一次模板,而不是像这样覆盖边界笔刷:
<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种颜色时)。希望有一些方法可以继承模板。
发布于 2010-07-08 23:09:10
您的代码非常接近正常工作;问题是GreenBorderButton将BorderBrush应用于按钮本身,而不是覆盖的模板中的边框。
要解决此问题,只需将边框的BorderBrush更改为使用父按钮的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" />https://stackoverflow.com/questions/3204873
复制相似问题