WPF样式和行为学习总结

样式和行为

样式是组织和重用格式化选项的重要工具,不是使用重复的标记填充XAML

行为是一款重用用户界面的更有挑战性的工具。基本思想是:使用行为封装一些通用的UI功能。

引入.Net名称空间System映射到XAML名称空间的前缀sys

xmlns:sys="clr-namespace:System;assembly=mscorlib"

每一个Style对象是一个Setter对象的集合。每一个Setter对象设置元素的单个属性。唯一的限制是设置器只能改变依赖项属性,不能修改其他属性。

Style类中有五个总要的属性

Setters:设置属性以及自动关联事件处理程序的Setter对象或者EventSetter对象

Triggers:继承制TriggerBase类并能自动改变样式设置的对象集合

Resources:希望用于样式的资源集合。例如,可能需要使用一个对象设置多个属性。

BaseOn:通过该属性可创建继承自其他样式设置的更具体样式

TargetType:该属性标示应用样式的元素类型。

在某些情况下,不能使用简单的特性字符串设置属性值。不能使用字符串设置ImageBrush对象,但是可以使用嵌套。

为了表示希望设置的属性,需要提供类和属性的名称。

这样设置的一些问题

<Style x:Key="txtbtnStyle">

            <Setter Property="Button.FontFamily" Value="Times New Roman"/>

            <Setter Property="TextBlock.FontFamily" Value="Arial"/>

        </Style>

这样做并不会得到想要的效果,问题在于Button.FontFamilyextBlock.FontFamily属性是在各自的基类中分别声明,但是他们都是引用同一个依赖项属性,所以后设置的对象起作用。

可以使用TargetType属性解决这种问题

触发器

触发器通过Style.Triggs集合链接到样式,每个样式都可以有多个触发器。触发器重要的属性

Trigger:这是一种简单触发器,可以监测依赖项属性的变化,然后使用设置器改变样式。

MultiTrigger:与Trigger相似,但这中触发器联合的多种条件,只有当所有这些条件都满足时才发生。

DataTrigger:这种触发器使用数据绑定。与Trigger类似,只不过监视的任意绑定数据的变化.

MultiDataTrigger:联合多个数据触发器。

EventTrigger:这是最发杂的触发器,当事件发生时,这种触发器用于动画。

触发器的优点是不需要为反转他们而编写任何逻辑,只要停止应用触发器,元素就会恢复到正常外观。可创建一次应用于同一元素的多个触发器,如果这些触发器设置不同的属性,这种情况就不会出现混乱,然而,如果多个触发器修改同一属性,那么最后的触发器有效。

<Style.Triggers>

                <Trigger Property="Control.IsFocused" Value="True">

                    <Setter Property="Control.Foreground" Value="DarkRed"/>

                </Trigger>

                <Trigger Property="Control.IsMouseOver" Value="True">

                    <Setter Property="Control.Foreground" Value="LightBlue"/>

                    <Setter Property="Control.FontWeight" Value="Bold"/>

                </Trigger>

                <Trigger Property="Button.IsPressed" Value="True">

                    <Setter Property="Control.Foreground" Value="Red"/>

                </Trigger>

            </Style.Triggers>

当按钮被点击时,前景色是红色,因为红色是最后设置的。

如果希望创建只有当多个条件都为真时才激活的触发器,可以使用MultiTrigger,这种触发器提供了一个Condition是集合,可通过该属性定义一系列属性和值得集合,

<Style x:Key="BigMultiStyle">

            <Style.Triggers>

                <MultiTrigger>

                    <MultiTrigger.Conditions>

                        <Condition Property="Button.IsPressed" Value="True"></Condition>

                        <Condition Property="Control.IsMouseOver" Value="True"/>

                    </MultiTrigger.Conditions>

                    <MultiTrigger.Setters>

                        <Setter Property="Control.Foreground" Value="Red"/>

                    </MultiTrigger.Setters>

                </MultiTrigger>

            </Style.Triggers>

        </Style>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值