以下是我的应用程序资源中的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的背景颜色?
答案 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} ,并将新属性公开为依赖项属性。) 子>