WPF第六章 样式和触发器
- 格式:ppt
- 大小:171.50 KB
- 文档页数:20
wpf中triggers的用法
在WPF中,Triggers(触发器)是一种用于在特定条件下触发UI
元素状态或属性更改的机制。
它允许开发者对UI元素的行为和样式进
行动态控制。
Triggers的使用方式如下:
1.使用样式触发器(Style Triggers):可以在样式的Triggers
集合中定义触发器,当满足特定条件时,将会应用定义的触发器。
例如,可以根据鼠标悬停、获得焦点或鼠标点击等事件来改变按钮的背
景色或文本样式。
2.使用数据触发器(Data Triggers):可以根据数据绑定的值来
触发UI元素的状态或属性更改。
例如,可以根据数据绑定的值变化来
改变TextBlock的颜色或显示隐藏元素。
3.使用事件触发器(Event Triggers):可以根据特定的事件来
触发UI元素的行为。
例如,可以根据按钮的点击事件来执行特定的操作。
4.使用多触发器(Multi Triggers):可以同时应用多个触发器,只有满足所有的触发条件时,才会触发所定义的动作或更改。
5.使用故事板触发器(Storyboard Triggers):可以将动画效果应用到UI元素上,并在满足特定条件时启动动画。
例如,根据某个属性的值来触发动画的播放。
通过Triggers,开发者可以实现更加灵活和动态的界面交互,能够根据用户或程序的操作来自动改变UI元素的样式或行为。
此外,Triggers还可以与模板(Template)和行为(Behavior)等其他特性结合使用,进一步扩展WPF应用程序的功能。
WPF中的Style(风格,样式)WPF中的Style(风格,样式)周银辉在WPF中我们可以使⽤Style来设置控件的某些属性值,并使该设置影响到指定范围内的所有该类控件或影响指定的某⼀控件,⽐如说我们想将窗⼝中的所有按钮都保持某⼀种风格,那么我们可以设置⼀个Style,⽽不必分别设置每个按钮的风格。
Style是作为⼀种资源被保存下来的. 看下⾯的例⼦:<Window.Resources><Style TargetType="Button"><Setter Property="Foreground" Value="Blue"/><Setter Property="FontFamily " Value="CourierNew"/></Style></Window.Resources>我们声明了⼀个Style,它被声明在Window.Resources中说明它的有效范围是当前窗体,TargetType="Button" 指⽰该Style的作⽤对象是Button类的实例,也就是说在当前窗体中的所有Button实例都将受到该Style的影响(除⾮某Button有明确地指明它所使⽤的是另外的Style)。
<Setter Property="Foreground" Value="Blue"/> 这⾥的Setter是⼀个设置器,⽤来设置该Style要对TargetType的那些属性或对象进⾏设置,我们这⾥设置的是Button的Foreground属性,将其值设置为Blue,同理,我们将Button的FontFamily属性设置为CourierNew这样⼀来,在默认情况下,被加载到窗⼝中的所有Button对象都将受到这个Style的影响,从⽽⽂本变成统⼀的蓝⾊CourierNew字体。
wpf 模板WPF 模板。
WPF(Windows Presentation Foundation)是一种用于创建 Windows 应用程序的UI 框架,它提供了丰富的图形、文本、媒体和用户界面的功能。
WPF 模板是一种用于定义控件外观和布局的重要工具,它可以帮助开发人员快速创建具有统一外观和风格的界面。
本文将介绍 WPF 模板的基本概念、使用方法以及一些实际应用技巧。
WPF 模板的基本概念。
WPF 模板是一种XAML(Extensible Application Markup Language)标记语言,它定义了控件的外观和布局。
在 WPF 中,每个控件都有一个默认的模板,开发人员可以根据自己的需求对模板进行定制。
WPF 模板通常包括控件的视觉树、控件的控制模板和控件的数据模板。
控件的视觉树定义了控件的外观和布局结构,它包括控件的各个部分的样式、布局和行为。
控件的控制模板定义了控件的外观和行为,它通常包括控件的各个部分的样式、布局和触发器。
控件的数据模板定义了控件的数据绑定和显示方式,它通常包括控件的数据源、数据绑定和数据显示方式。
使用 WPF 模板。
使用 WPF 模板可以帮助开发人员快速创建具有统一外观和风格的界面。
在WPF 中,可以通过样式(Style)、控件模板(ControlTemplate)和数据模板(DataTemplate)来定义控件的外观和布局。
开发人员可以使用样式来定义控件的外观和行为,可以使用控件模板来定义控件的外观和布局,可以使用数据模板来定义控件的数据绑定和显示方式。
在使用 WPF 模板时,开发人员需要了解控件的默认模板结构和样式属性,然后根据自己的需求对模板进行定制。
可以使用 Blend for Visual Studio 工具来创建和编辑模板,也可以直接在 XAML 中编写模板。
在定制模板时,需要注意保持模板的逻辑结构和控件的行为方式,以确保界面的统一性和美观性。
实际应用技巧。
wpf eventtrigger用法WPF EventTrigger用法-从基础到高级,从入门到精通WPF是一种面向对象的用户界面框架,使用XAML来构建用户界面,并且具有强大的可扩展性和可重用性。
EventTrigger是WPF中一个非常强大的工具,可以帮助我们在特定事件发生时触发某些操作或动画。
在本文中,我们将一步一步地学习WPF EventTrigger的用法,包括基础概念、基本语法、常见用例和高级技巧。
第一部分:基础概念在开始学习EventTrigger之前,我们需要了解一些基本概念。
首先,WPF 中的事件是一种对象间的通信机制,一个对象可以在特定条件下触发一个事件,而其他对象可以注册监听器来接收并处理这个事件。
其次,EventTrigger是一种特殊的触发器,它用于在特定的事件发生时触发一个或多个操作或动画。
第二部分:基本语法在WPF中,EventTrigger可以用在任何支持触发器的地方,比如控件、样式、模板等。
它的基本语法如下:XAML<EventTrigger RoutedEvent="event"><Actions><! 在这里定义需要触发的操作或动画></Actions></EventTrigger>这里的"RoutedEvent"是一个路由事件,它指定了需要触发的事件。
Actions元素是一个容器,用于定义需要触发的操作或动画。
第三部分:常见用例在实际应用中,EventTrigger有很多用途。
下面是一些常见的用例:1. 触发故事板动画XAML<TextBlock Text="Hello, WPF"><TextBlock.Triggers><EventTrigger RoutedEvent="TextBlock.MouseDown"> <BeginStoryboard><Storyboard><! 在这里定义动画效果></Storyboard></BeginStoryboard></EventTrigger></TextBlock.Triggers></TextBlock>在这个例子中,当鼠标在TextBlock上按下时,会触发一个动画效果。
wpf datatrigger用法DataTrigger是WPF中一种可以通过绑定数据源的属性值来改变控件的外观和行为的触发器。
使用DataTrigger可以在特定条件下改变控件的可见性、背景颜色、字体样式等等。
下面是使用DataTrigger的一般步骤:1. 在XAML中,将需要应用DataTrigger的控件放在合适的位置。
2. 在控件的Style或者控件的模板(Template)中,添加一个或多个DataTrigger。
3. 在DataTrigger中,使用Binding将控件的属性和数据源的属性进行绑定。
4. 设置DataTrigger的Value子属性为特定的值。
当数据源的属性等于这个值时,DataTrigger将生效。
5. 在DataTrigger中,设置控件的属性,这些属性将在触发条件满足时进行相应的改变。
下面是一个使用DataTrigger改变按钮颜色的示例:```xaml<Button Content="Click Me"><Button.Style><Style TargetType="Button"><Style.Triggers><DataTrigger Binding="{Binding IsEnabled}"Value="False"><Setter Property="Background" Value="Red"/><Setter Property="Foreground" Value="White"/> </DataTrigger></Style.Triggers></Style></Button.Style></Button>```以上示例中,Button的IsEnabled属性被绑定到一个数据源的IsEnabled属性。
WPF⾯试题及答案(⼆)⼀ · WPF中什么是样式?⾸先明⽩WPF中样式属于资源中重要的⼀种。
同时样式也是属性值的集合,能被应⽤到⼀个合适的元素中,或者说能将⼀组属性应⽤到多个元素。
WPF中样式可以设置任何依赖属性。
WPF中样式也⽀持触发器,通过属性的改变,触发⼀组活动,包括改变某个控件的样式。
WPF中元素只能使⽤⼀个样式。
样式有继承的特性,样式可以继承样式。
⼆ · WPF中什么是模板?WPF中模板是⽤于定义或重定义控件结构,或者说对象的外观。
WPF中模板有两类,⼀个是控件模板(ControlTemplate) 另⼀个是数据模板(DataTemplate),它们都派⽣⾃FrameworkTemplate抽象类。
总共有三⼤模板 ControlTemplate,ItemsPanelTemplate,DataTemplate。
1 ControlTemplate 主要⽤途是更改控件的外观。
它有两个重要属性:VisualTree(视觉树)内容属性和Triggers触发器,对于触发器可以不⽤过多考虑,触发器可有可⽆。
VisualTree就是呈现我们所画的控件。
Triggers可以对我们的视觉树上的元素进⾏⼀些变化。
2 ItemsPanelTemplate 是个特殊的空间模板,主要⽤来标明多条⽬控件如何显⽰它所包含的多项数据。
也可以说是指定⽤于项的额布局的⾯板。
多⽤于多个内容控件的⽬标。
多为Panel属性或者Panel结尾的属性。
3 DataTemplate 主要⽤于数据的呈现。
也被称为显⽰绑定数据对象的模板。
三 · 绑定(Binding )的基础⽤法WPF ⾥分三种:Binding,PriorityBinding,MultiBinding,这三种Binding的基类都是BindingBase,⽽BindingBase⼜继承于MarkupExtension。
常见的使⽤Binding⽅法是:1 针对于继承于FrameworkElement控件。
wpf中的样式与模板1.WPF样式类似于Web应⽤程序中的CSS,在WPF中可以为控件定义统⼀的样式(Style)。
样式属于资源的⼀种,例如为Button定义统⼀的背景颜⾊和字体:<Window.Resources><Style TargetType="Button"><Setter Property="Background" Value="Yellow" /></Style></Window.Resources><StackPanel><Button>Button A</Button></StackPanel>在Style中定义的属性及值,影响到Window中的所有类型为Button的控件的样式这种样式,类似于CSS中的类型选择器,为某种类型定义样式。
此外还可以在Style中加⼊x:Key属性,做为特定的样式(注意,这种也需要定义TargetType);在第⼀个样式的基础上创建⼀个新样式可以达到这⼀⽬的,如下所⽰:<Window.Resources><Style x:Key="BigFontButtonStyle"><Setter Property="Control.FontFamily" Value="Times New Roman" /><Setter Property="Control.FontSize" Value="18" /><Setter Property="Control.FontWeight" Value="Bold" /></Style><Style x:Key="EmphasizedBigFontButtonStyle" BasedOn="{StaticResource BigFontButtonStyle}"><Setter Property="Control.Foreground" Value="White" /><Setter Property="Control.Background" Value="DarkBlue" /></Style></Window.Resources>以编程⽅式设置样式若要以编程⽅式向元素分配命名样式,请从资源集合中获取该样式,然后将其分配给元素的 Style 属性。
wpf trigger优先级技巧WPF(Windows Presentation Foundation)是Microsoft开发的一种用于创建Windows桌面应用程序的框架。
在WPF中,Trigger是一种用于根据特定条件改变控件外观或行为的重要机制。
本文将介绍一些WPF Trigger的优先级技巧,帮助开发人员更好地使用这一功能。
1. 触发器的优先级顺序在WPF中,控件的外观和行为可以通过多个触发器进行控制。
在这种情况下,触发器的优先级非常重要,因为它决定了哪个触发器将被应用到控件上。
触发器的优先级按照以下顺序进行决定:- 内联触发器(Inline Triggers):定义在控件内部的触发器具有最高优先级,它们将覆盖其他类型的触发器。
- 局部触发器(Local Triggers):定义在控件的资源区域内的触发器优先级次之。
- 样式触发器(Style Triggers):定义在控件样式中的触发器优先级再次降低。
- 模板触发器(Template Triggers):定义在控件模板中的触发器优先级最低。
根据这种优先级顺序,WPF将按照从上到下的顺序应用触发器。
因此,在编写样式或模板时,需要注意触发器的位置和顺序,以确保所需的效果得到正确应用。
2. 触发器的条件判断触发器通常是根据条件来判断是否应用于控件的。
WPF中的触发器条件可以使用多种方式进行判断,例如属性绑定、比较运算符和逻辑运算符等。
属性绑定是最常用的触发器条件判断方式之一。
通过绑定控件的某个属性到数据源或其他控件的属性,可以根据属性的值来决定是否应用触发器。
例如,可以通过绑定控件的IsEnabled属性到一个布尔类型的数据源,来根据数据源的值来启用或禁用控件。
比较运算符和逻辑运算符也可以用于触发器的条件判断。
通过使用诸如“等于”、“大于”、“小于”、“与”、“或”等运算符,可以根据多个属性的值来决定是否应用触发器。
例如,可以使用“IsMouseOver”属性和“IsPressed”属性来判断当鼠标悬停在控件上并按下时是否应用触发器。
wpf 手册
WPF(Windows Presentation Foundation)是微软推出的一种用于创建Windows桌面应用程序和用户界面的技术。
WPF手册是为了帮助开发者更好地理解和使用WPF而编写的指南和参考。
WPF手册通常会涵盖以下内容:
1. WPF简介:介绍WPF的概念、特点和用途,以及与其它微软技术的关系。
2. XAML语法:详细介绍XAML语言的语法、属性和事件,以及如何使用XAML进行界面设计和布局。
3. 控件介绍:介绍WPF中常用的控件,如按钮、文本框、列表框等,以及它们的属性和用法。
4. 数据绑定:介绍WPF中的数据绑定机制,包括数据源、绑定的方向和更新等。
5. 样式和模板:介绍如何通过样式和模板来定制WPF控件的外观和行为。
6. 动画和过渡:介绍如何在WPF应用程序中创建动画效果和过渡效果。
7. 性能优化:提供一些优化WPF应用程序性能的技巧和建议。
8. 实例代码:提供一些示例代码,以便开发者更好地理解和应用WPF技术。
总之,WPF手册是一个非常有用的资源,可以帮助开发者快速上手并精通WPF技术,从而更高效地开发出高质量的Windows桌面应用程序。
WPF基础之样式样式基础样式(Style)是组织和重⽤格式化选项的重要⼯具。
不是使⽤重复的标记填充XAML,以便设置外边距、内边距、颜⾊以及字体等细节,⽽是创建⼀系列封装所有这些细节的样式,然后再需要之处通过属性来应⽤样式。
样式是可应⽤于元素的属性值集合。
使⽤资源的最常见原因之⼀就是保存样式。
使按钮具有统⼀格式的实现⽅式⼀:资源<Window.Resources><FontFamily x:Key="ButtonFontFamily">Times New Roman</FontFamily><sys:Double x:Key="ButtonFontSize">18</sys:Double><FontWeight x:Key="ButtonFontWeight">Bold</FontWeight></Window.Resources><Grid Name="gird1" ShowGridLines="True"><Button FontFamily="{StaticResource ButtonFontFamily}" FontSize="{StaticResource ButtonFontSize}" FontWeight="{StaticResource ButtonFontWeight}"> </Button></Grid>这个⽰例可以正常⼯作,它将字体细节(所谓的magic number)移出的标记。
但也存在两个问题。
除了资源的名称相似之外,没有明确指定三个资源是相关的。
这使维护应⽤程序变得复杂。
WPF中的触发器(Trigger)这节来讲⼀下WPF中的触发器——Trigger。
触发器,是指在既定条件或者特殊场景下被触发,从⽽去执⾏⼀个操作。
在WPF中,触发器可以分为以下⼏类:基本触发器(Trigger);事件触发器(EventTrigger);数据触发器(DataTrigger);多条件触发器(MultiTrigger,MultiDataTrigger)。
下⾯我们来通过代码⼀⼀了解。
1基本触发器(Trigger)请看如下代码:我为Slider控件的样式设置了⼀个基本触发器,需要关注的是Trigger的Property和Value,Property设置要根据Slider控件的哪个属性触发,Value设置当属性为何值时触发,在Setter中也有Property和Value,此处则是设置触发时要执⾏的操作,上述触发器的作⽤时当Slider的Value为1时,设置其背景为纯绿⾊:运⾏效果如下:设置了两个Slider作对⽐,当Slider值为1时,触发器被触发,背景⾊也进⾏了对应修改。
当我们想监视多个属性的值来控制触发器的执⾏,可以使⽤MultiTrigger,请看如下代码:多属性触发器,需要将多个触发条件写在MultiTrigger.Conditions中,其它⽤法都是⼀致的,上述代码中,当Slider的Value为1并且样式为垂直的时候,触发器才会触发,运⾏结果如下:2事件触发器(EventTrigger)请先看如下代码:事件触发器有些不同的是,它触发执⾏的是⼀段动画,并且是通过RoutedEvent来执⾏要监视的事件,上述代码中,当Button的MouseEnter 事件被触发时,其前景⾊会逐渐变成紫⾊,请看运⾏结果:(关于WPF动画的相关知识,会在下节讲述,请关注后续⽂章。
)3数据触发器(DataTrigger)请看如下代码:我们还是以修改Slider背景⾊为例⼦,数据触发器使⽤Binding来设置要监视的对象,其结果跟⽰例1⼀致,此处不再展⽰,除了绑定⼀个数据,也可以通过MultiDataTrigger来绑定多个数据,当多个数据同时满⾜条件时才触发:多数据触发器,需要将多个触发条件写在MultiDataTrigger.Conditions中,其它⽤法都是⼀致的,上述代码中,当Slider的Value为1并且最⼤值为1的时候,触发器才会触发,运⾏结果如下:。
wpf之DataTrigger数据触发器wpf中,根据数据的值的不同,UI的界⾯随之改变(显⽰控件、隐藏控件以及改变控件的其它属性),这时我们可以⽤DataTrigger数据触发器。
下⾯两个案例实现同样的功能,当条件(数据的值)不同时,显⽰不同的按钮。
创建 Core类:using System;using System.Collections.Generic;using System.Linq;using System.Text;using ponentModel;namespace DataTriggerDemo2{public class Core : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;public void OnPropertyChanged(string propertyName){if (this.PropertyChanged != null){this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));}}private string condition;public string Condition{get { return condition; }set{condition = value;OnPropertyChanged("Condition");}}}}View CodeXAML:<Window x:Class="DataTriggerDemo2.MainWindow"xmlns="/winfx/2006/xaml/presentation"xmlns:x="/winfx/2006/xaml"xmlns:local="clr-namespace:DataTriggerDemo2"Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"><Window.Resources><local:Core x:Key="core"/><Style TargetType="{x:Type Button}"><Setter Property="Margin" Value="5"/><Setter Property="Padding" Value="0,8.5"/><Setter Property="FontSize" Value="16"/></Style></Window.Resources><Grid><ContentControl><ContentControl.ContentTemplate><DataTemplate><DockPanel LastChildFill="True" DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window, AncestorLevel=1}, Path=DataContext}"><TextBlock DockPanel.Dock="Top" Text="按钮列表" HorizontalAlignment="Center" FontSize="18"/><Border DockPanel.Dock="Right" Width="160"><StackPanel Orientation="Vertical"><TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Red" FontSize="16" Text="{Binding Source={StaticResource ResourceKey=core},Path=Condition}"/><Button x:Name="btn1" Content="编辑按钮1" Visibility="Collapsed"/><Button x:Name="btn2" Content="编辑按钮2" Visibility="Collapsed"/><Button x:Name="btn3" Content="编辑按钮3" Visibility="Collapsed"/><Button x:Name="btn4" Content="编辑按钮4" Visibility="Collapsed"/></StackPanel></Border></DockPanel><DataTemplate.Triggers><DataTrigger Binding="{Binding Source={StaticResource ResourceKey=core},Path=Condition}" Value="条件1"><Setter TargetName="btn1" Property="Visibility" Value="Visible"/></DataTrigger><DataTrigger Binding="{Binding Source={StaticResource ResourceKey=core},Path=Condition}" Value="条件2"><Setter TargetName="btn1" Property="Visibility" Value="Visible"/><Setter TargetName="btn2" Property="Visibility" Value="Visible"/></DataTrigger><DataTrigger Binding="{Binding Source={StaticResource ResourceKey=core},Path=Condition}" Value="条件3"><Setter TargetName="btn1" Property="Visibility" Value="Visible"/><Setter TargetName="btn2" Property="Visibility" Value="Visible"/><Setter TargetName="btn3" Property="Visibility" Value="Visible"/></DataTrigger><DataTrigger Binding="{Binding Source={StaticResource ResourceKey=core},Path=Condition}" Value="条件4"><Setter TargetName="btn1" Property="Visibility" Value="Visible"/><Setter TargetName="btn2" Property="Visibility" Value="Visible"/><Setter TargetName="btn3" Property="Visibility" Value="Visible"/><Setter TargetName="btn4" Property="Visibility" Value="Visible"/></DataTrigger></DataTemplate.Triggers></DataTemplate></ContentControl.ContentTemplate></ContentControl></Grid></Window>View CodeC#:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace DataTriggerDemo2{///<summary>/// MainWindow.xaml 的交互逻辑///</summary>public partial class MainWindow : Window{private Core core;public MainWindow(){InitializeComponent();}private void Window_Loaded(object sender, RoutedEventArgs e){core = this.FindResource("core") as Core;core.Condition = "条件3";}}}View CodeLoaded⽅法⾥赋值: core.Condition = "条件3",则数据触发器触发相应的DataTrigger:运⾏结果只显⽰三个按钮:wpf的灵活之处在与,同样的效果可以⽤很多种⽅法实现。
WPF Trigger调用方法在WPF (Windows Presentation Foundation) 中,Trigger通常用于数据模板(如DataTemplate)或样式(如Style)中,以根据某些条件动态地改变元素的视觉表现。
Trigger并不直接调用方法,但你可以通过Trigger的Setter属性来更改属性,或者通过数据绑定和命令来间接调用方法。
下面是一些使用Trigger的常见场景:1. 属性触发器你可以使用Trigger来根据某个属性的值更改另一个属性的值。
例如,你可能有一个按钮,当它被禁用时,你希望它的背景色变为灰色。
2. 数据触发器DataTrigger允许你根据绑定数据的值来更改元素的属性。
例如,你可能有一个文本框,其文本颜色根据绑定到的某个数据属性的值而变化。
3. 事件触发器虽然Trigger和DataTrigger本身不直接处理事件,但你可以使用EventTrigger在特定事件发生时执行动作。
这些动作通常涉及动画或故事板。
4. 通过命令调用方法如果你想要根据某个条件调用方法,你可能需要使用命令(ICommand)而不是Trigger。
你可以在视图模型中定义一个命令,并在视图中通过数据绑定将其绑定到一个按钮或其他可交互的元素上。
然后,你可以使用Trigger或DataTrigger来更改绑定到命令的属性(例如,CommandParameter或IsEnabled),从而间接地控制命令的执行。
WPF 的触发器主要用于视觉表现,而不是用于直接调用方法。
如果你需要基于某些条件执行更复杂的逻辑,你可能需要在视图模型中使用更传统的方法(如条件语句或事件处理程序)。
WPF触发器Triggers这⼀篇,总结Triggers。
FrameworkElement、Style、ControlTemplate和DataTemplate都具有⼀个类型为TriggerCollection 的Triggers属性,TriggerCollection 继承⾃: Collection<TriggerBase>,所以它们都有⼀个触发器的集合。
触发器可以在xaml中实现样式的⾃动变化,或者使⽤数据绑定,或者触发某些事件的时候,⽣成动画。
所以触发器分为:Trigger、MultiTrigger、DataTrigger、MultiDataTrigger和EventTrigger。
1. Trigger:根据某⼀个依赖属性的变化,⽤Setter更改某些样式,⽰例代码:<Style TargetType="Button"><Style.Triggers><Trigger Property="IsPressed" Value="True"><Setter Property="FontSize" Value="28"></Setter><Setter Property="BorderBrush" Value="Red"></Setter><Setter Property="BorderThickness" Value="2"></Setter></Trigger></Style.Triggers></Style>当Button的IsPressed的Value为True时,会⽤Setter完成FontSize,BorderBrush和BorderThickness的设置。
WPF触发器(trigger)详解属性触发器<Style TargetType="ListBoxItem"><Setter Property="Opacity"Value="0.5"/><Setter Property="MaxHeight"Value="75"/><Style.Triggers><Trigger Property="IsSelected"Value="True"><Trigger.Setters><Setter Property="Opacity"Value="1.0"/></Trigger.Setters></Trigger></Style.Triggers></Style>表⽰ ListBoxItem的isselected属性值为true 时,其Opacity值为1数据触发器使⽤ DataTrigger,可以在数据对象的属性值与指定的 Value 匹配时设置属性值。
例如,在显⽰ Employee 对象列表时,可能希望前景⾊根据每个 Employee 的当前出勤情况⽽变化。
(例如,⽤紫⾊前景⾊显⽰当前正在休假的 Employee。
)查看代码⽚段3<Window.Resources><c:Places x:Key="PlacesData"/><Style TargetType="ListBoxItem"><Style.Triggers><DataTrigger Binding="{Binding Path=State}"Value="WA"><Setter Property="Foreground"Value="Red"/></DataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding Path=Name}"Value="Portland"/><Condition Binding="{Binding Path=State}"Value="OR"/></MultiDataTrigger.Conditions><Setter Property="Background"Value="Cyan"/></MultiDataTrigger></Style.Triggers></Style><DataTemplate DataType="{x:Type c:Place}"><Canvas Width="160"Height="20"><TextBlock FontSize="12"Width="130"Canvas.Left="0"Text="{Binding Path=Name}"/><TextBlock FontSize="12"Width="30"Canvas.Left="130"Text="{Binding Path=State}"/></Canvas></DataTemplate></Window.Resources><StackPanel><TextBlock FontSize="18"Margin="5"FontWeight="Bold"HorizontalAlignment="Center">Data Trigger Sample</TextBlock><ListBox Width="180"HorizontalAlignment="Center"Background="Honeydew"ItemsSource="{Binding Source={StaticResource PlacesData}}"/></StackPanel>1.单条件触发以上的DataTrigger就是⼀个单条件触发器。
WPF触发器(Trigger、DataTrigger、EventTrigger)WPF中有种叫做触发器的东西(记住不是数据库的trigger哦)。
它的主要作⽤是根据trigger的不同条件来⾃动更改外观属性,或者执⾏动画等操作。
WPFtrigger的主要类型有:Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger⼏种。
从字⾯意思上我们想⼤家已经知道个⼤概,接下来我将还会⽤实例代码逐⼀进⾏介绍。
trigger主要运⽤的场景在Style、ControlTemplate、DataTemplate三个地⽅。
在这些地⽅可以使⽤trigger,具体视情况⽽定。
1.在Style中使⽤各种trigger 在style中使⽤的trigger主要是属性的触发器,当属性的值发⽣改变是将会引发触发器。
a.普通属性trigger 当⿏标滑过时字体变成红⾊<CheckBox Content="Style Trigger MouseOver Red"><CheckBox.Resources><Style TargetType="{x:Type CheckBox}"><Setter Property="Foreground" Value="SkyBlue"/><Style.Triggers><!--⿏标滑过时字体为红⾊--><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="Red"/></Trigger></Style.Triggers></Style></CheckBox.Resources></CheckBox> b.普通属性MultiTrigger 当checkbox勾选并且⿏标滑过时字体变成绿⾊<CheckBox Content="Style MultiTrigger Checked and MouseOver Green "><CheckBox.Resources><Style TargetType="{x:Type CheckBox}"><Setter Property="Foreground" Value="SkyBlue"/><Style.Triggers><MultiTrigger><MultiTrigger.Conditions><Condition Property="IsChecked" Value="True" /><Condition Property="IsMouseOver" Value="True" /></MultiTrigger.Conditions><Setter Property="Foreground" Value="Green"/></MultiTrigger></Style.Triggers></Style></CheckBox.Resources></CheckBox> c.EventTrigger ⿏标划⼊长度变长⿏标移出长度变短<CheckBox Content="Style EventTrigger " Width="70" HorizontalAlignment="Left"><CheckBox.Resources><Style TargetType="{x:Type CheckBox}"><Setter Property="Foreground" Value="SkyBlue"/><Style.Triggers><EventTrigger RoutedEvent="Mouse.MouseEnter"><EventTrigger.Actions><BeginStoryboard><Storyboard><DoubleAnimationDuration="0:0:0.2"Storyboard.TargetProperty="Width"To="150" /></Storyboard></BeginStoryboard></EventTrigger.Actions></EventTrigger><EventTrigger RoutedEvent="Mouse.MouseLeave"><EventTrigger.Actions><BeginStoryboard><Storyboard><DoubleAnimationDuration="0:0:0.2"Storyboard.TargetProperty="Width"To="70" /></Storyboard></BeginStoryboard></EventTrigger.Actions></EventTrigger></Style.Triggers></Style></CheckBox.Resources></CheckBox> 2.在ControlTemplate中使⽤trigger 在ControlTemplate中使⽤的trigger主要是在controltemplate中的元素的触发器,当属性的值发⽣改变是将会引发触发器。