统一样式的定义方法: <Style TargetType="Button">,如果没有更优先的(样式的优先性)样式指定,那么默认所有在Grid中的Button都用这套样式
请注意不要加上x:Key属性
<Grid.Resources > <Style TargetType="Button"> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush StartPoint="0.5,0" EndPoint=" 0.5,1"> <GradientStop Color="Orange" Offset="0"/> <GradientStop Color="Aquamarine" Offset="0.5"/> <GradientStop Color="SkyBlue" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="Width" Value="80"/> <Setter Property="Height" Value="38"/> </Style> </Grid.Resources>
特定的样式的定义方法: x:Key属性指定样式key ,定义时还可以基于已定义的某种样式,下面这代码可以很好都看出样式 及其作用范围
<UserControl x:Class="WinFormWPF.ButtonStyle" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="300" Width="300"> <Grid> <Grid.Resources > <Style TargetType="Button" x:Key="ButtonStyleBase"> <Setter Property="Width" Value=" 300"></Setter> </Style> <Style TargetType="Button" > <Setter Property="Background"> <Setter.Value> <LinearGradientBrush StartPoint="0.5,0" EndPoint=" 0.5,1"> <GradientStop Color="Orange" Offset="0"/> <GradientStop Color="Aquamarine" Offset="0.5"/> <GradientStop Color="SkyBlue" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="Width" Value="20"/> <Setter Property="Height" Value="38"/> </Style> <Style TargetType="Button" x:Key="MyKey" BasedOn="{StaticResource {x:Type Button}}" > <!--上面这一句基于 默认的Button 样式,请注意此时的默认Button样式一定要存在,否则编译通不, 这跟也是StaticResource /DynamicResource的区别 , 这一句是基于指定的样式 <Style TargetType="Button" x:Key="MyKey" BasedOn="{StaticResource {x:Type Button}}" > --> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush StartPoint="0.5,0" EndPoint=" 0.5,1"> <GradientStop Color="Orange" Offset="0"/> <GradientStop Color="SkyBlue" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> </Style> </Grid.Resources> <Button >MyButton</Button> <Button Style="{StaticResource MyKey}" VerticalAlignment="Top" > <!--指定边框样式,请注意这里的样式的有效范围 -> <Button.BorderBrush > <LinearGradientBrush StartPoint="0.5,0" EndPoint=" 0.5,1"> <GradientStop Color="Orange" Offset="0"/> <GradientStop Color="Aquamarine" Offset="0.5"/> <GradientStop Color="SkyBlue" Offset="1"/> </LinearGradientBrush> </Button.BorderBrush> StyleSelf </Button> </Grid> </UserControl>
控件模板的定义 : <Setter Property="Template">指定 模板
<Style TargetType="Button" x:Key="MyKey" BasedOn="{StaticResource {x:Type Button}}" > <!--上面这一句基于 默认的Button 样式,请注意此时的默认Button样式一定要存在,否则编译通不, 这跟也是StaticResource /DynamicResource的区别 , 这一句是基于指定的样式 <Style TargetType="Button" x:Key="MyKey" BasedOn="{StaticResource {x:Type Button}}" > --> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush StartPoint="0.5,0" EndPoint=" 0.5,1"> <GradientStop Color="Orange" Offset="0"/> <GradientStop Color="SkyBlue" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <!--这里通过Template属性重新定义了Button的模板,让Button为一个圆形--> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid> <Ellipse Fill="{TemplateBinding Background}"/> <ContentPresenter Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
Trigger的定义:<Control.Triggers > 或 <Style.Triggers> 来指定一个Trigger对象
<Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button" > <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <!--鼠标移到上面,当事件不发生时,回到原来的事件--> <Setter Property="Foreground" Value="Yellow" /> </Trigger> <Trigger Property="IsKeyboardFocused" Value="True"> <!--键盘焦点,当事件不发生时,回到原来的事件--> <Setter Property="Foreground" Value="White" /> </Trigger> </ControlTemplate.Triggers> <Grid> <Ellipse Fill="{TemplateBinding Background}"/> <ContentPresenter Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </ControlTemplate> </Setter.Value> </Setter>
<Style TargetType="Button" > <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <!----> <Setter Property="Foreground" Value="Red" /> </Trigger> </Style.Triggers> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush StartPoint="0.5,0" EndPoint=" 0.5,1"> <GradientStop Color="Orange" Offset="0"/> <GradientStop Color="Aquamarine" Offset="0.5"/> <GradientStop Color="SkyBlue" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="Width" Value="20"/> <Setter Property="Height" Value="38"/> </Style>
最后请教一下高手们,为什么这样定义会报错? 提示无效的属性,难道这样还要指定TargetType?但指定TargetType ,好像……请教高手…
<Button > <Button.Style > <Style> <Setter Property="FontSize" Value="12"/> </Style> </Button.Style> </Button>
转自:http://www.cnblogs.com/CsharpBlog/archive/2009/10/14/1583544.html