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

问题描述 投票:1回答:1

我不知道我是否正确表达了这个问题,但这是我的问题。我在屏幕上有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"/>
wpf xaml controltemplate wpf-style
1个回答
1
投票

如果您没有将属性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-->

[我承认,此解决方案无助于使代码/样式更清晰/可读,但它很容易完成工作。

© www.soinside.com 2019 - 2024. All rights reserved.