WPF第六章 样式和触发器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


</MultiTrigger.Conditions>
• • • • •
• • •
<MultiTrigger.Setters> <Setter Property="Control.Foreground" Value="LightYellow"/> <Setter Property="Control.FontSize" Value="40"/> </MultiTrigger.Setters> </MultiTrigger>
使用样式
每个WPF元素都可以使用一个样式,样式通 过元素的Style属性嵌入到元素中 例:让Button按钮使用样式 <Button Padding="5" Margin="5" Name="cmd" Style="{StaticResource BigfontStyle}" Height="40">A Customized Button</Button>
注意
样式设置了元素的初始外观,但是可以随意 覆盖它们设置的这些特性,例如应用了刚 才的样式,如果显示的设置了FontSize属性, 那么就会覆盖样式的属性值!
通过代码实现样式应该
CmdButton.Style=(Style) cmd.FindResource(“样 式名”)
可以为某个元素单独设置样式
WPF中的触发器
WPF的一个设计目标是:尽可能扩展XAML 声明代码,不在依赖于后台代码,就像事 件也可以用XAML代码实现 触发器就是有这样的功能,可以简单的样式 改变自动化,而以前需要通过后台事件处 理程序实现
• •
触发器通过Style.Triggers集合连接到样式,每个样式都可以有任意多个触发 器 触发器可以分很多种:
Trigger MultiTrigg er DataTrigg er EventTrig ger
最简单的触发器,检测属性的变化, 改变样式 多条件触发器,只有满足所有条件之 后触发器才生效 数据绑定触发器,监视绑定的数据的 变化 事件触发器
每个简单的触发器都指定了要监视的属性, 当属性值改变的时候,就会应用在 Trigger.Setters集合中的值 例:下面的触发器监视 按钮是否获取键盘焦 点,当获取焦点的时候前景色会改变
样式的继承
• 可以在许多不同的层次定义任意数量的样 式,但是每个WPF元素一次只能使用一个 样式, 我们可以通过样式继承来实现使用 多个样式
通过类型自动应用样式
我们以前介绍的样式需要在元素中引用,还有一种方法就是 为特定元素自动应用样式 <Window.Resources> • <Style TargetType="Button"> • <Setter Property="FontFamily" Value="Times New Roman"/> • <Setter Property="FontSize" Value="18"/> • <Setter Property="FontWeight" Value="Bold"/> • </Style> • </Window.Resources> • 如果不希望按钮使用该样式 • 可以指定样式为空 Style="{x:Null}"
• • • • • • • • • • • • • <Button> <Button.Style> <Style> <Setter Property="Control.FontFamily" Value="Times New Roman"/> <Setter Property="Control.FontSize" Value="18"/> <Setter Property="Control.FontWeight" Value="Bold"/> </Style> </Button.Style> <Button.Content> 你好 </Button.Content> </Button>
• 一般不推荐定义元素中的样式,因为 一般不推荐定义元素中的样式, 无法在元素中共享该样式
样式中设置属性
每个Style对象包含一个属性和值,某些情况下不能简单的使 用字符串作为属性值,例如设置元素的背景色: • <Style x:Key="HappyStyle"> • <Setter Property="Control.Background"> • <Setter.Value> • <ImageBrush TileMode="Tile" ViewportUnits="Absolute" Viewport="0 0 32 32" ImageSource="F:\qqq\happyface.jpg" Opacity="0.5"></ImageBrush> • </Setter.Value> • </Setter> • </Style>
</Style.Triggers> </Style>
• 注意 动态指定元素样式的时候 不应该给样
式设 键名
关键事件处理程序
• 可以为事件关联特定事件处理程序的 EventSetter对象集合,这样可以通过事件 来动态改变样式 • 比如我们要实现鼠标悬停效果 • 以前我们要为每个元素实现鼠标悬停效果, 要为每个元素实现MouseEnter, MouseLeave事件,现在有了基于样式的事 件处理程序就简化了这个任务
触发器的优点
触发器的优点是不需要为翻转它们写任何代 码,只要触发器的值被恢复,元素也会恢 复到原来的样式
多条件触发器
• • <Style.Triggers> <MultiTrigger>
• • • • •
<MultiTrigger.Conditions> <Condition Property="Control.IsFocused" Value="True"> </Condition> <Condition Property="Button.IsPressed" Value="True"> </Condition>
动态指定元素样式
如果希望给某个元素单独设置样式,可以通过Style.TargetType属性来指定应用 该样式的类 例如只创建按钮的样式 • <Window.Resources> • <Style TargetType="Button"> • <Setter Property="FontFamily" Value="Times New Roman"/> • <Setter Property="FontSize" Value="18"/> • <Setter Property="FontWeight" Value="Bold"/> • </Style> • </Window.Resources>
属性详解
在上面的例子中我们设置属性使用 Grid.Background 为特定元素设置样式,但 是缺点是只为目标控件设置样式,不能在 不同的元素间公用样式, 如果我们希望Button 和Label 共同使用某个 样式,就可以给他们的父类(Control类) 设置样式
• <Window.Resources> • <Style x:Key="BigfontStyle"> • <Setter Property="Control.FontFamily" Value="Times New Roman"/> • <Setter Property="Control.FontSize" Value="18"/> • <Setter Property="Control.FontWeight" Value="Bold"/> • </Style> • </Window.Resources>
样式解释
• 一个样式都是System.Windows.Style 对象, 这个样式对象包含了一个Setter集合,该集 合具有三个Setter对象,每个Setter对象用 于一个希望设置的属性 • 每个Setter对象包含两部分 1 要设置的属性 2 希望为属性设置的数值 样式一般作为资源对待,都要有个键名(Key)
WPF中的样式
样式是可以应用到元素的属性值的集合,WPF中的样 式系统和HTML中的CSS层叠样式表类似 样式可以为任何元素定义一个独立包装所有希望设置 的属性的样式 样式一般定义在 例: 资源中
<Window.Resources> <Style x:Key="BigfontStyle"> <Setter Property=“Button.FontFamily" Value="Times New Roman"/> <Setter Property=" Button.FontSize" Value="18"/> <Setter Property=" Button.FontWeight" Value="Bold"/> </Style> </Window.Resources>
控件的继承关系图
Control Coቤተ መጻሕፍቲ ባይዱtentControl
HeaderedContentControl Label ScrollViewer GroupBox Button UserControl Tabitem ToolTip Window Expander
特别情况
如果在样式中使用父类属性,将样式给多个 不同的控件使用,不同的元素会忽略那些 不使用于他本事的样式
相关文档
最新文档