在静态资源文件之外分配一个 属性 值

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,但它很简单并且可以完成工作。