使用自定义属性值在模板中设置颜色

时间:2014-08-24 13:57:08

标签: c# wpf xaml

我无法弄清楚,为什么这不起作用:

我有两个按钮:

<Button Content="qwerty" BorderBrush="Tomato">
<Button Content="dvorak">

我用这种风格调整这些按钮的外观:

<Style TargetType="Button">
        <Setter Property="BorderBrush" Value="DarkRed" />
        <Setter Property="Template">         

            <Setter.Value>
                <ControlTemplate TargetType="Button">                    
                    <Border x:Name="RootElement" CornerRadius="4">
                        <Border.Background>
                            <SolidColorBrush x:Name="BorderBrush" Color="{TemplateBinding BorderBrush}" />
                        </Border.Background>
 ...

第一个按钮应该将x:Name="BorderBrush"中的颜色设置为&#34;番茄&#34;因为我在按钮定义中指定了它。

第二个按钮未指定BorderBrush="...",因此应使用DarkRed中的默认颜色<Setter Property="BorderBrush" Value="DarkRed" />

但它根本不使用任何颜色。

如果我像这样<SolidColorBrush x:Name="BorderBrush" Color="DarkRed" />硬编码颜色,那么它可以工作,但这不好,因为我需要能够在按钮定义中设置颜色。

1 个答案:

答案 0 :(得分:1)

BorderBrush属性是持有Brush对象,但您尝试将其绑定到Color的{​​{1}}属性,但该属性无效。

您需要使用边框的SolidColorBrush属性上的TemplateBinding

Background

作为替代解决方案,您可以在使用<Border x:Name="RootElement" CornerRadius="4" Background="{TemplateBinding BorderBrush}"> 的帮助下绑定父Color的{​​{1}}属性:

BorderBrush