我不知道我是否正确表达了这个问题,但这是我的问题。我在屏幕上有3个按钮。每个按钮使用静态资源文件中的相同MyButtonStyle
。所有3个按钮的行为均相同,但我希望每个人的边框都具有不同的CornerRadius属性。由于Button本身没有CornerRadius属性,因此无法像对Background和Brushes那样使用TemplateBinding
。我可以扩展基本样式以创建3个单独的样式,但是我想尝试以这种方式进行。这是我的代码:
<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border"
BorderThickness="2"
BorderBrush="{TemplateBinding BorderBrush}"
Background="{TemplateBinding Background}"
CornerRadius = something >
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
所以问题是,我应该确切地输入CornerRadius的值,以便能够针对代码或Window XAML文件中的每个对象分别对其进行修改?我的目标是这样的,尽管我不确定它是否可行:
<Button x:Name="Button1"
Width="240"
Height="150"
Style="{StaticResource MyButtonStyle}"
BoundNameForCornerRadius="10"/>
如果您没有将属性Tag
用于其他目的,则可以通过将样式中的CornerRadius
绑定到按钮的Tag
属性来找到简单的解决方法:
<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border"
BorderThickness="2"
BorderBrush="{TemplateBinding BorderBrush}"
Background="{TemplateBinding Background}"
CornerRadius = "{Binding Path=Tag,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}" >
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Button x:Name="Button1"
Width="240"
Height="150"
Style="{StaticResource MyButtonStyle}"
Tag="10"/> <!-- set CornerRadius to 10-->
<Button x:Name="Button2"
Width="240"
Height="150"
Style="{StaticResource MyButtonStyle}"
Tag="30"/> <!-- set CornerRadius to 30-->
[我承认,此解决方案无助于使代码/样式更清晰/可读,但它很容易完成工作。