更改BasedOn ControlTemplate中的边框背景

时间:2012-12-13 20:19:01

标签: wpf xaml controltemplate

以下是我的应用程序资源中的XAML,它全局更改应用程序中的所有Button控件,使其外观和行为符合我的要求:

<Style TargetType="{x:Type Button}" x:Key="MyButtonStyle">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="Border" CornerRadius="0" BorderThickness="0" 
                            Background="CornflowerBlue" BorderBrush="CornflowerBlue">
                    <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True" />
                </Border>
                <ControlTemplate.Triggers>
                    <!-- a bunch o' triggers here -->
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

在我的应用程序的一个用户控件上,我想更改此按钮的某些属性。以下是我在UserControl.Resources部分中使用的一些XAML现在执行此操作:

<Style x:Key="SpecialButton" TargetType="Button" BasedOn="{StaticResource MyButtonStyle}">
    <Setter Property="Width" Value="20" />
    <Setter Property="Visibility" Value="Collapsed" />
    <Setter Property="Content" Value=">" />
    <Setter Property="Border" Value="#eeeeee" />
    <Setter Property="Border.Background" Value="#eeeeee" />
</Style>

我的UserControl上的Button控件,我为SpecialButton指定样式具有正确的宽度,可见性和内容,但最后两次尝试不起作用。如何在此SpecialButton样式的应用程序资源中更改名称为“Border”的Border的背景颜色?

1 个答案:

答案 0 :(得分:2)

您可以使用TemplateBinding以基本样式在控件上设置Background属性。同样在基本样式中,将背景颜色设置为默认的“CornflowerBlue”。

<Setter Property="Background" Value="CornflowerBlue" />
<Setter Property="Template">
    <Setter.Value>    
        <ControlTemplate TargetType="{x:Type Button}">
            <Border x:Name="Border" Background="{TemplateBinding Background}"

现在您可以在派生样式中覆盖背景:

<Style x:Key="SpecialButton" TargetType="Button" BasedOn="{StaticResource MyButtonStyle}">
    <Setter Property="Background" Value="#eeeeee" />

<子> (注意,如果你想使用Button控件上没有定义的其他属性 - 或者说你想使用多种背景颜色 - 那么你必须创建自己的控件来继承{{1} ,并将新属性公开为依赖项属性。)