常见的样式文件属性字段解析

创建样式文件

在这里插入图片描述wpf工程右键添加-资源字典(.xaml文件)即可,当然我建议创建对应的文件夹保存这些样式文件,方便管理。

添加样式文件内容

初始样式文件内容如下(没有任何样式定义):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
                    
</ResourceDictionary>                    
  1. 如下定义一个简单TextBlock控件样式:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
                    
    <Style x:Key="FontAwesomeBig"  TargetType="TextBlock">
        <Setter Property="FontFamily" Value="/LCM;component/Font/#FontAwesome"/>
        <Setter Property="Foreground" Value="#676A6C" />
        <Setter Property="TextAlignment" Value="Center"/>
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
        <Setter Property="FontSize" Value="17"/>
    </Style>
    
</ResourceDictionary>   
  1. 如下定义一个简单DataGrid和DataGridRow控件样式:
    <Style TargetType="DataGrid" x:Key="DataGridCustomizedStyle">
        <!--允许调整列宽-->
        <Setter Property="CanUserResizeColumns" Value="True"/>
        <!--禁止拖动列内容-->
        <Setter Property="CanUserReorderColumns" Value="false"/>
        <!--禁止添加行,消除最后一行的多余显示-->
        <Setter Property="CanUserAddRows" Value="false"/>
        <!--禁止排序-->
        <Setter Property="CanUserSortColumns" Value="false"/>
        <!--虚拟化行 减少通讯开销-->
        <Setter Property="EnableRowVirtualization" Value="False"/>
        <!--首列冻结-->
        <Setter Property="FrozenColumnCount" Value="0"/>
        <!--显示网格线-->
        <Setter Property="GridLinesVisibility" Value="None"/>
        <!--屏蔽最左侧的行标题-->
        <Setter Property="HeadersVisibility" Value="Column"/>
        <!--字体颜色-->
        <Setter Property="Foreground" Value="White" />
        <!--背景颜色-->
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="BorderThickness" Value="0"/>
        <!--网格线颜色-->
        <Setter Property="HorizontalGridLinesBrush" Value="#11C2EE"/>
        <Setter Property="VerticalGridLinesBrush" Value="#11C2EE"/>
    </Style>
    <Style TargetType="DataGridRow" x:Key="DataGridRowCustomizedStyle">
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Background" Value="#11C2EE"/>
        <Style.Triggers>
            <!--选中一行 改变字体颜色和背景-->
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsSelected" Value="True"/>
                </MultiTrigger.Conditions>
                <Setter Property="Background" Value="#11C2EE"/>
                <Setter Property="Foreground" Value="White"/>
            </MultiTrigger>
            <!--鼠标滑过 只改变背景 不改变字体颜色-->
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsMouseOver" Value="True"/>
                    <Condition Property="IsSelected" Value="False"/>
                </MultiTrigger.Conditions>
                <Setter Property="Background" Value="#11C2EE"/>
            </MultiTrigger>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsMouseOver" Value="False"/>
                    <Condition Property="IsSelected" Value="true"/>
                </MultiTrigger.Conditions>
                <Setter Property="Background" Value="#11C2EE"/>
            </MultiTrigger>
        </Style.Triggers>
    </Style>

关于样式的引用可以查看我前面的文章

样式属性内容解析

  • TextBlock样式中属性内容:

Style:定义一个样式模板
x:Key:改样式模板定义一个别名
TargetType:指定样式应用控件类别即什么控件使用
Setter:设置定义控件属性参数
Property:属性
Value:属性的参数值
重点讲解:
FontFamily属性的内容此处是设置文字(类似时使用微软雅黑还是楷体宋体等等)。
如果key值不定义默认只要引用了资源字典中定义的控件都使用该样式。定义了key值则在控件style="{staticresource xxx}"中应用指定定义的样式。

  • DataGrid和DataGridRow样式属性内容:

Triggers:
触发器,当属性发生变化时,可以进行响应,并自动调整样式。每个样式可以有任意多个触发器,而且每个触发器都是System.Windows.TriggerBase的派生类的实例。

继承自TriggerBase的类还有:

  1. MultiTrigger:与Trigger类似,但这种触发器联合了多个条件,只有满足了所有这些条件,才会启动出触发器
  2. DataTrigger:数据绑定触发器
  3. MultiDataTrigger:联合多个数据触发器
  4. EventTrigger:这是复杂的触发器,当事件发生时,这种触发器应用动画

普通触发器是等待属性发生变化,而事件触发器是等待特定的事件被引发。事件触发器要求用户提供一系列修改控件的动作,这些动作通常被应用为动画。 如下图所示:

<Window.Resources>
    <Style x:Key="SetButtonMouseOver">
        <!--设置触发器-->
        <Style.Triggers>
            <!--设置触发器的路由事件-->
            <EventTrigger RoutedEvent="Control.MouseEnter">
                <!--设置一个动画,改变元素的字体的大小-->
                <EventTrigger.Actions>
                    <BeginStoryboard>                            
                        <Storyboard>
                             <DoubleAnimation Duration="0:0:0:2" Storyboard.TargetProperty="FontSize" To="30"></DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<StackPanel>
    <!--设置样式-->
    <Button Style="{StaticResource SetButtonMouseOver}">Hello,World!!!</Button>
</StackPanel>

多级触发器如果希望创建只有当几个条件都为真时才激活的触发器,可使用MultiTrigger,这种触发器提供了一个Conditions(条件)集合,可通过该集合定义一系列属性值的集合。如下图所示:

<Window.Resources>
    <Style x:Key="SetButton">
        <!--触发器-->
        <Style.Triggers>
            <!--使用多条件触发器-->
            <MultiTrigger>
                <!--通过Conditions属性设置多个条件(一个是获取焦点和鼠标移动到元素上。)-->
                <MultiTrigger.Conditions>
                    <Condition Property="Control.IsFocused" Value="true"></Condition>
                    <Condition Property="Control.IsMouseOver" Value="true"></Condition>
                </MultiTrigger.Conditions>

                <!--设置多个属性值-->
                <MultiTrigger.Setters>
                    <Setter Property="Control.FontSize" Value="30"></Setter>
                </MultiTrigger.Setters>                    
            </MultiTrigger>                
        </Style.Triggers>
    </Style>
</Window.Resources>

<StackPanel>
    <!--设置样式。-->
    <Button Style="{StaticResource SetButton}">Hello,World!!!</Button>
</StackPanel>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值