XAML资源和Style样式及触发器

这篇博客深入探讨了XAML中的资源利用,包括StaticResource和DynamicResource的差异,以及如何在WPF和Windows8应用中应用它们。资源字典的概念也被阐述,它是资源管理的核心,允许在不同位置重用对象。Style作为资源的一种,通过Setter和Trigger定义控件的外观和行为。Style中的Trigger提供了基于属性变化和事件触发的动态响应。博客还讨论了不同类型的Trigger,如基本Trigger、MultiTrigger、DataTrigger和EventTrigger,展示了如何通过它们实现复杂的交互和动画效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是资源:

资源是可以在应用程序的不同位置重用的对象。XAML资源的示例包括画笔和样式。每个

框架级别的元素(FrameworkElement或FrameworkContentElement)都有一个resource属

性,该属性包含资源定义的资源(作为ResourceDictionary)。可以在任何元素上定义资

源,但是资源通常是在根元素上定义的。当在页面根元素上定义一个资源时,页面逻辑

树中的所有元素都可以访问它,并且您可以重用相同的资源来设置接受该资源表示的类

型的任何属性的值。

可以将资源引用为静态资源动态资源。这可以通过使用StaticResource标记扩展或

DynamicResource标记扩展来实现。通过替换已定义资源的值,StaticResource为属性

提供了一个值,DynamicResource将属性值延迟为资源的运行时引用,从而为属性提供

一个值。动态资源引用在每次访问此类资源并在运行时访问对象图时强制执行新的查

找。为了获得这种访问,WPF属性系统中的依赖属性支持DynamicResource概念,并计

算表达式。因此,只能对依赖项属性目标使用DynamicResource。

因此,资源的定义概括几点如下:

与传统WEB应用中CSS样式表类似

目的为了实现对象的重复使用

有助于XAML代码重用,有助于应用维护的一致性

定义资源的语法格式:

<根元素对象.Resources>

<资源定义>

</根元素对象.Resources>

  1. 资源字典(ResourceDictionary)

如果想用代码创建一个完整的WPF应用程序,且可能还想用代码在该应用程序中创建任

何资源。为此,创建一个新的ResourceDictionary实例,然后使用对ResourceDictionary.

add .的连续调用将所有资源添加到字典中。然后,使用由此创建的ResourceDictionary

在页面范围或Application.Resources中出现的元素上设置Resources属性。还可以将

ResourceDictionary作为独立对象维护,而不需要将其添加到元素中。但是,如果您这样做,您必须按项目键访问其中的资源,就好像它是一个通用字典一样。资源字典中的每

个资源必须有一个惟一的键。在标记中定义资源时,通过x: key指令分配惟一的键。通

常,键是字符串;但是,你也可以通过使用适当的标记扩展将其设置为其他对象类型。定

义资源之后,可以使用指定键名的资源标记扩展语法引用要用于属性值的资源。

(1)资源字典分类

A. WPF应用程序中,XAML资源分为StaticResource(静态资源)DynamicResource(动态资源) 

B. Windows8应用中,XAML资源仅支持StaticResource(静态资源)

C. 资源应用域不同,XAML资源可分为FrameworkElement.Resources和Application.Resources

(1) FrameworkElement.Resources是将资源对象应用于同一个对象数的不同对象上,称之为页面资源,通常被定义在XAML页面根元素上。

(2) Application.Resources贯穿整个应用级别的资源,通常被定义在App.xaml页面

3.Style样式

构成Style最重要的两种元素是Setter和Trigger,Setter类帮助我们设置控件的静态外观风格,Trigger类则帮助我们设置控件的行为风格。

  1. Style中的Setter

Setter,设置器。什么的设置器呢?属性值的。我们给属性赋值的时候一般都采用“

性名=属性值”的形式。Setter类的Property属性用来指明你想为目标的那个属性赋值;

Setter类的Value属性则是你提供的属性值。

例如:在Window的资源词典中放置一个针对TextBlock的Style,Style中使用若干Setter来设定TextBlock的一些属性,这样程序中的TextBlock就会具有统一的风格,除非你使用{x:Null}显示地清空Style。

  1. Style中的Trigger

Trigger,触发器,即当某些条件满足时会触发一个行为(比如某些值的变化或动画的发生等)。触发器比较像事件。事件一般是由用户操作触发的,而触发器除了有事件触发型的EventTrigger外还有数据变化触发型的Trigger/DataTrigger及多条件触发型的

MultiTrigger/MultiDataTrigger等。

1、基本Trigger

Trigger类是最基本的触发器。类似于Setter,Trigger也有Property和Value这两个属

,Property是Trigger关注的属性名称,Value是触发条件。Trigger类还有一个Setter属性,此属性值是一组Setter,一旦触发条件被满足,这组Setter的“属性—值”就会被应用,触发条件不在满足后,各属性值会被还原。

例如:包含一个针对CheckBox的Style,当CheckBox的IsChecked属性为true的时候前景色和字体会改变。

2、MultiTrigger

MultiTrigger是个容易让人误解的名字,会让人以为是多个Trigger集成在一起,实际上叫MultiConditionTrigger更合适,因为必须多个条件同时成立时才会被触发

MultiTrigger比Trigger多了一个Conditions属性,需要同时成立的条件就存储在这个合中。

3、由数据触发的DataTrigger

程序中经常会遇到基于数据执行某些判断情况,遇到这种情况时我们可以考虑使用 DataTrigger。DataTrigger对象的Binding属性会把数据源源不断送过来,一旦送来的值与Value属性一致,DataTrigger即被触发。

4、多数据条件触发的MultiDataTrigger

有时我们会遇到要求多个数据条件同时满足时才能触发变化的需求,此时可以考虑使用MultiDataTrigger。比如有这样一个需求:用户界面上使用ListBox显示了一列Student数据,当Student对象同时满足ID为2、Name为Tom的时候,条目的高亮显示。

5、由事件触发的EventTrigger

EventTrigger是触发器中最特殊的一个。首先,它不是由属性值数据的变化来触发而由事件来触发;其次,被触发后它并非应用一组Setter,而是执行一段动画。因此,UI层的动画效果往往与 EventTrigger事件触发,另一个由MouseLeave事件触发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值