在静态资源文件之外分配一个 属性 值
Assign a property value outside of the static resource file
我不知道我对问题的表述是否正确,但这是我的问题。
我在屏幕上有 3 个按钮。每个按钮都使用静态资源文件中的相同 MyButtonStyle
。所有 3 个按钮的行为方式相同,但我希望每个按钮的边框都有不同的 CornerRadius 属性。由于 Button 本身没有 CornerRadius 属性,因此我无法像对背景和画笔所做的那样使用 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 -->
我承认此解决方案无助于 code/style 更多 clear/readable,但它很简单并且可以完成工作。
我不知道我对问题的表述是否正确,但这是我的问题。
我在屏幕上有 3 个按钮。每个按钮都使用静态资源文件中的相同 MyButtonStyle
。所有 3 个按钮的行为方式相同,但我希望每个按钮的边框都有不同的 CornerRadius 属性。由于 Button 本身没有 CornerRadius 属性,因此我无法像对背景和画笔所做的那样使用 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 -->
我承认此解决方案无助于 code/style 更多 clear/readable,但它很简单并且可以完成工作。