用Style的BaseOn属性可以实现WPF样式的显式继承,例如,有一个基样式:


<Style x:Key="BASE">
<Setter Property="Control.Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Offset="0" Color="Green"/>
<GradientStop Offset="0.5" Color="Blue"/>
<GradientStop Offset="1" Color="Red"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
下面分别定义2个样式继承它:


<Style BasedOn="{StaticResource BASE}" TargetType="{x:Type Button}">
<Setter Property="BorderBrush" Value="Red"></Setter>
</Style>
<Style BasedOn="{StaticResource BASE}" TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="Black"></Setter>
</Style>
而且还可以继续继承上面定义的样式,例如对Button的样式再次扩展:
<Style BasedOn="{StaticResource {x:Type Button}}" x:Key="NewButton" TargetType="{x:Type Button}">
<Setter Property="Margin" Value="10,0,0,0"></Setter>
</Style>
下面使用这些样式:<Setter Property="Margin" Value="10,0,0,0"></Setter>
</Style>
<Grid>
<StackPanel Width="250" Height="400">
<Button Height="30"></Button>
<TextBox Height="30"></TextBox>
<Button Style="{StaticResource NewButton}" Height="30"/>
</StackPanel>
</Grid>
完整的代码如下:<StackPanel Width="250" Height="400">
<Button Height="30"></Button>
<TextBox Height="30"></TextBox>
<Button Style="{StaticResource NewButton}" Height="30"/>
</StackPanel>
</Grid>


<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="BASE">
<Setter Property="Control.Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Offset="0" Color="Green"/>
<GradientStop Offset="0.5" Color="Blue"/>
<GradientStop Offset="1" Color="Red"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
<Style BasedOn="{StaticResource BASE}" TargetType="{x:Type Button}">
<Setter Property="BorderBrush" Value="Red"></Setter>
</Style>
<Style BasedOn="{StaticResource BASE}" TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="Black"></Setter>
</Style>
<Style BasedOn="{StaticResource {x:Type Button}}" x:Key="NewButton" TargetType="{x:Type Button}">
<Setter Property="Margin" Value="10,0,0,0"></Setter>
</Style>
</Page.Resources>
<Grid>
<StackPanel Width="250" Height="400">
<Button Height="30"></Button>
<TextBox Height="30"></TextBox>
<Button Style="{StaticResource NewButton}" Height="30"/>
</StackPanel>
</Grid>
</Page>
