WPF触发器与模板

触发器

触发器可以理解为,当达到了触发的条件,那么就执行预期内的响应,可以是样式、数据变化、动画等。触发器通过Style.Triggers集合连接到样式中,每个样式都可以有任意多个触发器,并且每个触发器都是System.Windows.TriggerBase的派生类实例,以下是触发器的类型:

  • Trigger:监测依赖属性的变化、触发器生效
  • MultiTrigger:通过多个条件的设置、达到满足条件、触发器生效
  • DataTrigger:通过数据的变化、触发器生效
  • MultiDataTrigger:多个数据条件的触发器
  • EventTrigger:事件触发器,触发了某类事件时,触发器生效

属性触发器

Trigger:监测依赖属性的变化、触发器生效

<Window x:Class="EventLearn.UseStyle"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:EventLearn"mc:Ignorable="d"Title="UseStyle" Height="450" Width="800"><Window.Resources><Style x:Key="BaseStyle" TargetType="Button"><Setter Property="Width" Value="100"/><Setter Property="Height" Value="40"/><Setter Property="Foreground" Value="Red"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="Blue"/><Setter Property="FontSize" Value="20"/></Trigger><Trigger Property="IsMouseOver" Value="False"><Setter Property="Foreground" Value="Red"/><Setter Property="FontSize" Value="15"/></Trigger>                </Style.Triggers></Style><Style x:Key="style1" TargetType="Button" BasedOn="{StaticResource BaseStyle}"><Setter Property="Content" Value="Hello"/></Style></Window.Resources><Grid><StackPanel><Button Style="{StaticResource style1}" /><Button Style="{StaticResource style1}"/><Button Style="{StaticResource style1}"/></StackPanel></Grid>
</Window>

Trigger类定义的属性

Tirgger属性说明
Property Value使用属性触发器,Property和Value属性用于指定触发器的激活时间。例如,Property = “IsMouseOver” ,Value = “True”
Setters一旦激活触发器,就可以使用Setters定义一个Setter元素集合,来改变属性值。Setter类定义Property、TargetName和Value属性,已修改对象属性。
EnterActions ExitActions除了定义 settm之 外,还可以定义 EnterActions 和 ExitActions。使用这两个属性,可以定义一个TriggerAction元素集合。EnterActions在启动触发器时激活(此时通过属性触发器应用Property/Value组合)。ExitActions在触发器结束之前激活(此时不再应用Property/Value组合)

多触发器

MultiTrigger:通过多个条件的设置、达到满足条件、触发器生效

MultiTrigger有一个Conditions属性,可以在其中设置属性的有效值。还有一个Setters属性,可以在其中指定需要设置的属性

<Windowx:Class="EventLearn.UseStyle"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:EventLearn"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Title="UseStyle"Width="800"Height="450"mc:Ignorable="d"><Window.Resources><Style x:Key="BaseStyle" TargetType="TextBox"><Setter Property="Width" Value="100" /><Setter Property="Height" Value="40" /><Setter Property="Foreground" Value="Red" /><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="Blue" /><Setter Property="FontSize" Value="20" /></Trigger><Trigger Property="IsMouseOver" Value="False"><Setter Property="Foreground" Value="Red" /><Setter Property="FontSize" Value="15" /></Trigger><MultiTrigger><MultiTrigger.Conditions><Condition Property="IsMouseOver" Value="true"/><Condition Property="IsFocused" Value="true"/></MultiTrigger.Conditions><MultiTrigger.Setters><Setter Property="Background" Value="Pink"/></MultiTrigger.Setters></MultiTrigger></Style.Triggers></Style><Style x:Key="style1" TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseStyle}"></Style></Window.Resources><Grid><StackPanel><TextBox Style="{StaticResource style1}" /><TextBox Style="{StaticResource style1}" /><TextBox Style="{StaticResource style1}" /></StackPanel></Grid>
</Window>

数据触发器

DataTrigger:通过数据的变化、触发器生效

<Windowx:Class="EventLearn.UseStyle"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:EventLearn"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Title="UseStyle"Width="800"Height="450"mc:Ignorable="d"><Window.Resources><Style x:Key="BaseStyle" TargetType="TextBox"><Setter Property="Width" Value="100" /><Setter Property="Height" Value="40" /><Setter Property="Foreground" Value="Red" /><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="Blue" /><Setter Property="FontSize" Value="20" /></Trigger><Trigger Property="IsMouseOver" Value="False"><Setter Property="Foreground" Value="Red" /><Setter Property="FontSize" Value="15" /></Trigger><!--  当在TextBox中写入123时,背景颜色变绿  --><DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text}" Value="123"><Setter Property="Background" Value="SeaGreen" /></DataTrigger></Style.Triggers></Style><Stylex:Key="style1"BasedOn="{StaticResource BaseStyle}"TargetType="{x:Type TextBox}" /></Window.Resources><Grid><StackPanel><TextBox Style="{StaticResource style1}" /><TextBox Style="{StaticResource style1}" /><TextBox Style="{StaticResource style1}" /></StackPanel></Grid>
</Window>

模板

控件的外观及其功能在WPF中是完全分离的。虽然按钮有默认的外观,但可以用模板完全定制其外观。

WPF提供了几个模板类型,它们派生自基类FrameworkTemplate。

模板类型说明
ControlTemplate使用ControlTemplate可以指定控件的可视化结构,重新设计其外观
ItemsPanelTemplate对于ItemsControl,可以赋予一个ItemsPanelTemplate,以指定其项的布局。每个ItemsControl都有一个默认的ItemsPanelTemplate。MenuItem使用WrapPanel,StatusBar使用DockPanel,ListBox使用VirtualizingStackPanel。
DataTemplateDataTemplates非常适用于对象的图形表示。给列表框指定样式,默认情况下,列表框中的项根据ToString()方法的输出来显示。应用DataTemplate,可以重写其操作,定义项的自定义表示
HierarchicalDataTemplateHierarchicalDataTemplate用于排列对象的树形结构。这个控件支持HierarchicalControls,如TreeViewItem和MenuItem

ControlTemplate

控件模板用来定义控件的外观、样式,还可通过控件模板的触发器(ControlTemplate.Triggers)修改控件的行为、响应动画等。

  • 对于WPF当中,每个控件都是无外观的,这意味着我们可以完全自定义其可视化的外观,但是不能修改其内部的行为,因为空间的行为已经被固定在控件的具体类中。
  • 在Winform当中,控件的外观与行为都被固定在空间的具体类中,当我们想要修改按钮的边框弧度或者修改控件身一些细节的时候,我们需要修改外观的同时,把原来具备的所有行为重写一遍,我们大多数称之为自定义控件。

ContentPresenter是控件内容的占位符,并定义了放置这些内容的位置。ContentPresenter的Content属性定义了内容的外观。

DataTemplate

<Windowx:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:WpfApp1"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Title="MainWindow"Width="800"Height="450"mc:Ignorable="d"><Grid><ListBox ItemsSource="{Binding ElementName=com, Path=ItemsSource}"><ListBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding Name}" /><TextBlock Text="---" /><TextBlock Text="{Binding Sex}" /></StackPanel></DataTemplate></ListBox.ItemTemplate></ListBox><ComboBoxx:Name="com"Width="100"Height="20"><ComboBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding Name}" /><TextBlock Text="---" /><TextBlock Text="{Binding Sex}" /></StackPanel></DataTemplate></ComboBox.ItemTemplate></ComboBox></Grid>
</Window>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【吊打面试官系列】Redis篇 - 关于Redis持久化

大家好&#xff0c;我是锋哥。今天分享关于Redis持久化的面试题&#xff0c;希望对大家有帮助&#xff1b; Redis 的持久化机制是什么&#xff1f;各自的优缺点&#xff1f; Redis 提供两种持久化机制 RDB 和 AOF 机制: 1、RDB &#xff08;Redis DataBase)持久化方式&#x…

Unity中UGUI中的PSD导入工具的原理和作用

先说一下PSD导入工具的作用&#xff0c;比如在和美术同事合作开发一个背包UI业务系统时&#xff0c;美术做好效果图后&#xff0c;程序在UGUI中制作好界面&#xff0c;美术说这个图差了2像素&#xff0c;那个图位置不对差了1像素&#xff0c;另外一个图大小不对等等一系列零碎的…

【数据库】MySQL数据库基础

文章目录 一、数据库的操作1、显示当前的数据库2、创建数据库 一、数据库的操作 1、显示当前的数据库 SHOW DATABASES;2、创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification:[DEFAULT] CHARA…

关于MySQL数据库的学习3

目录 前言: 1.DQL&#xff08;数据查询语言): 1..1基本查询&#xff1a; 1.2条件查询&#xff1a; 1.3排序查询&#xff1a; 1.3.1使用ORDER BY子句对查询结果进行排序。 1.3.2可以按一个或多个列进行排序&#xff0c;并指定排序方向&#xff08;升序ASC或降序DESC&#…

【数据结构入门】顺序表详解(增删查改)

目录 顺序表的基本概念 动态顺序表的实现 初始化 插入 尾插法 头插法 指定位置之前插入 删除 尾删法 头删法 指定位置删除 查找 销毁 顺序表的基本概念 什么是顺序表&#xff1f; 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般…

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第六:trans_nullmodel class

近几十年来&#xff0c;系统发育分析和零模型的整合通过增加系统发育维度&#xff0c;更有力地促进了生态位和中性影响对群落聚集的推断。trans_nullmodel类提供了一个封装&#xff0c;包括系统发育信号、beta平均成对系统发育距离(betaMPD)、beta平均最近分类单元距离(betaMNT…

【赠书第20期】AI绘画与修图实战:Photoshop+Firefly从入门到精通

文章目录 前言 1 入门篇&#xff1a;初识Photoshop与Firefly 2 进阶篇&#xff1a;掌握Photoshop与Firefly的核心技巧 3 实战篇&#xff1a;运用Photoshop与Firefly进行创作 4 精通篇&#xff1a;提升创作水平&#xff0c;拓展应用领域 5 结语 6 推荐图书 7 粉丝福利 前…

idea 的基本配置

一、安装目录介绍 其中&#xff1a;bin 目录下&#xff1a; 二、配置信息目录结构 这是 IDEA 的各种配置的保存目录。这个设置目录有一个特性&#xff0c;就是你删除掉整个目录之后&#xff0c;重新启动 IntelliJ IDEA 会再自动帮你生成一个全新的默认配置&#xff0c;所以很多…

AI预测福彩3D第11弹【2024年3月17日预测--第2套算法重新开始计算第3次测试】

今天继续开始咱们第2套算法的验证&#xff0c;计划每套算法连续测试10期&#xff0c;达到50%的命中率即为较优的模型&#xff0c;可继续使用。老规矩&#xff0c;先上图表&#xff0c;再下结论~ 最终&#xff0c;经过研判分析&#xff0c;2024年3月17日福彩3D的七码预测结果如下…

ggg访问,修改hosts

ggg访问&#xff0c;修改hosts 第二种方式有效

使用递归做三级菜单 Java SpringBoot

使用递归做三级菜单 Java SpringBoot 实体类 Data public class SysMenu implements Serializable {private Long id;private Long parentId;private String name;private Integer type;private String path;private String component;private String perms;private String i…

理财第一课:炒股词典

文章目录 基础代码规则委比委差量比换手率市盈率市净率 散户亏钱的原因庄家分析炒股战法波浪理论其它 钱者&#xff0c;人生之大事&#xff0c;死生存亡之地&#xff0c;不可不察也。耕田之利&#xff0c;十倍&#xff1b;珠玉之赢&#xff0c;百倍&#xff1b;闹革命&#xff…

Flask vs. Django:选择适合你的Web开发框架【第134篇—Flask vs. Django】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask vs. Django&#xff1a;选择适合你的Web开发框架 在选择一个适合你项目的Web开发框架…

功能齐全的免费 IDE Visual Studio 2022 社区版

面向学生、开放源代码和单个开发人员的功能齐全的免费 IDE 下载地址 Visual Studio 2022 社区版 - 下载最新的免费版本 Visual Studio 2022 Community Edition – Download Latest Free Version 准备安装 选择需要安装的程序 安装进行中 使用C学习程序设计相关知识并培养编程…

HTML、CSS和JavaScript在Web开发中的作用

一 解释HTML、CSS和JavaScript在Web开发中的作用 HTML (HyperText Markup Language) HTML是网页内容的结构和语义标记语言。它定义了网页的基本框架&#xff0c;包括标题、段落、列表、链接、图片等元素。HTML的主要作用是创建和组织网页内容&#xff0c;并定义这些内容的结构…

水库大坝安全监测中需要注意的事项

随着经济和社会的发展&#xff0c;水资源的需求也在不断增加。因此&#xff0c;建设水库已成为保障水资源的主要方式之一。然而&#xff0c;随着水库规模的增大和工程的复杂性的增加&#xff0c;水库大坝的安全问题也日益引起重视。为此&#xff0c;需要对水库大坝进行安全监测…

Pretrain-finetune、Prompting、Instruct-tuning训练方法的区别

来自&#xff1a;【多模态】28、LLaVA 第一版 | Visual Instruction Tuning 多模态模型的指令微调_多模态指令跟随数据-CSDN博客 几种模型训练方法的区别&#xff1a; 1、Pretrain-finetune&#xff1a;先在大量数据集上做预训练&#xff0c;然后针对某个子任务做 finetune 2…

System Verilog的接口、程序块与断言解析

接口、程序块与断言 1 接口 1.1 使用接口简化连接 // 接口 interface arb_if(input bit clk);logic [1:0] grant,request;logic rst; endinterface// 使用了简单接口的仲裁器 module arb (arb_if arbif);...always(posedge arbif.clk or posedge arbif.rst)beginif(arbif.rs…

Unity判断某个材质是否拥有某张贴图

在Unity中&#xff0c;一个材质是唯一的&#xff0c;也就是实例&#xff0c;当我们打开Debug面板时&#xff0c;就可以看清楚材质的具体信息。 其中SvaedProperties就是材质保存的属性&#xff0c;当然贴图也是属性&#xff0c;也就是TexEnvs下的属性 当然&#xff0c;要判断某…

c++11 标准模板(STL)本地化库 - std::isspace(std::locale) - 检查字符是否被本地环境分类为空白

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 检查字符是否被本地环境分类为空白 std::isspace(std::locale) template&l…