WPF初学者之WPF样式

统一样式的定义方法: <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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值