<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="ControlTemplates.GradientButton" > <!-- Resources used by the template. --> <RadialGradientBrush RadiusX="1" RadiusY="5" GradientOrigin="0.5,0.3" x:Key="HighlightBackground"> <GradientStop Color="White" Offset="0" /> <GradientStop Color="Blue" Offset=".4" /> </RadialGradientBrush> <RadialGradientBrush RadiusX="1" RadiusY="5" GradientOrigin="0.5,0.3" x:Key="PressedBackground"> <GradientStop Color="White" Offset="0" /> <GradientStop Color="Blue" Offset="1" /> </RadialGradientBrush> <SolidColorBrush Color="Blue" x:Key="DefaultBackground"></SolidColorBrush> <SolidColorBrush Color="Gray" x:Key="DisabledBackground"></SolidColorBrush> <RadialGradientBrush RadiusX="1" RadiusY="5" GradientOrigin="0.5,0.3" x:Key="Border"> <GradientStop Color="White" Offset="0" /> <GradientStop Color="Blue" Offset="1" /> </RadialGradientBrush> <!-- The button control template. --> <ControlTemplate x:Key="GradientButtonTemplate" TargetType="{x:Type Button}"> <Border Name="Border" BorderBrush="{StaticResource Border}" BorderThickness="2" CornerRadius="2" Background="{TemplateBinding Background}" TextBlock.Foreground="White"> <Grid> <Rectangle Name="FocusCue" Visibility="Hidden" Stroke="Black" StrokeThickness="1" StrokeDashArray="1 2" SnapsToDevicePixels="True"> </Rectangle> <ContentPresenter Margin="{TemplateBinding Padding}" RecognizesAccessKey="True"></ContentPresenter> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="Border" Property="Background" Value="{StaticResource HighlightBackground}" /> </Trigger> <Trigger Property="IsPressed" Value="True"> <Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBackground}" /> </Trigger> <Trigger Property="IsKeyboardFocused" Value="True"> <Setter TargetName="FocusCue" Property="Visibility" Value="Visible"></Setter> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackground}"></Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> <!-- The style that applies the button control template. --> <Style TargetType="{x:Type Button}"> <Setter Property="Background" Value="{StaticResource DefaultBackground}"></Setter> <Setter Property="Control.Template" Value="{StaticResource GradientButtonTemplate}"></Setter> </Style> </ResourceDictionary>
在模板中使用模板绑定,在样式中设置属性,给background设置一个默认值。
当然控件本身通过模板绑定可以修改这个属性值。