0
点赞
收藏
分享

微信扫一扫

Style样式及触发器

云朵里的佛光 2022-03-10 阅读 117

样式(Style)
如果把WPF窗体看做一个舞台,那么窗体上的控件就是一个个演员,它们的职责就是在用户界面上按照业务逻辑的需要扮演自己的角色。为了让同一种控件能担当起不同的角色,程序员就要为它们设计多种外观样式和行为动作,这就是Style。构成Style最重要的两种元素是Setter和Trigger,Setter类帮助我们设置控件的静态外观风格,Trigger类则帮助我们设置控件的行为风格。
Style中的Setter
Setter,设置器。我们给属性赋值的时候一般都采用“属性名=属性值”的形式。Setter类的Property属性用来指明你想为目标的那个属性赋值;Setter类的Value属性则是你提供的属性值。
下面的例子中在Window的资源词典中放置一个针对TextBlock的Style,Style中使用若干 Setter来设定TextBlock的一些属性,这样程序中的TextBlock就会具有统一的风格,除非你使用{x:Null}显示地清空Style。
在这里插入图片描述

因为Style的内容属性是Setters,所以我们可以直接在style标签的内容区域写Setter。
上面的代码可以简化如下:
在这里插入图片描述

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 的时候前景色和字体会改变。XAML代码如下:
在这里插入图片描述

因为Triggers不是Style的内容属性,所以 <Style.Triggers>… </Style.Triggers>这层标签
不能省略,但Trigger是Trigger的内容属性,所以<Trigger.Setters>…<Trigger.Setters>这层标签是可以省略的,以上代码可以简化为:
在这里插入图片描述

2、MultiTrigger
MultiTrigger是个容易让人误解的名字,会让人以为是多个Trigger集成在一起,实际
上叫MultiConditionTrigger更合适,因为必须多个条件同时成立时才会被触发。 MultiTrigger比Trigger多了一个Conditions属性,需要同时成立的条件就存储在这个集合中。
稍微改动一下上面的例子,要求同时满足CheckBox被选中且Content为“正如我悄悄的来”时才会被触发。XAML代码如下(仅style部分):
在这里插入图片描述

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

4、多数据条件触发的MultiDataTrigger
有时我们会遇到要求多个数据条件同时满足时才能触发变化的需求,此时可以考虑使用MultiDataTrigger。比如有这样一个需求:用户界面上使用ListBox显示了一列Student数据,当Student对象同时满足ID为2、Name为Tom的时候,条目的高亮显示。
5、由事件触发的EventTrigger
EventTrigger是触发器中最特殊的一个。首先,它不是由属性值或数据的变化来触发
而由事件来触发;其次,被触发后它并非应用一组Setter,而是执行一段动画。因此,UI
层的动画效果往往与 EventTrigger事件触发,另一个由MouseLeave事件触发。

举报

相关推荐

0 条评论