WPF样式和行为学习总结

来源:互联网 发布:psp4000淘宝 编辑:程序博客网 时间:2024/06/13 12:42

样式和行为

样式是组织和重用格式化选项的重要工具,不是使用重复的标记填充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