XML

<Window.Resources>
<Style x:Key="ButtonStyle2" TargetType="{x:Type Button}">
<EventSetter Event="Click" Handler="b1SetColor"/>
</Style>
</Window.Resources> <Button x:Name="butrouter" Style="{DynamicResource ButtonStyle2}" Click="butrouter_Click" />
CS

private void butrouter_Click(object sender, System.Windows.RoutedEventArgs e)
{
// TODO: Add event handler implementation here.
} private void b1SetColor(object sender, System.Windows.RoutedEventArgs e)
{
// TODO: Add event handler implementation here. }

先执行butrouter_Click,再执行b1SetColor

之前有个文章是说样式的设置问题,可以参考这个     wpf中的样式

本文章主要说样式中事件EventSetter和触发器trigger

1.EventSetter
EventSetter这个理解比较简单,就是给样式使用者添加一个事件,比如给按钮添加点击事件,提供了另外一个方式来给控件添加事件
比如这个style
 <Style TargetType="Button"> 
                <Setter Property="FontSize" Value="40"></Setter>
                <EventSetter  Event="Click" Handler="xx"></EventSetter>
            </Style>
定义了一个button的style,设置字体大小
EventSetter  就是事件设置,event表示是什么事件,handler表示该事件关联哪个方法
这样的话就是说本window内的所有button都有有点击事件交给xx方法来处理

2.trigger触发器

trigger这个也是style的属性之一,触发器顾名思义就是在使用style样式的元素或者控件的某些属性发生变化的时候才会触发这个事件
trigger就定义了元素或者控件如何响应特点属性发生变化时候进行处理,比如用户输入等等,鼠标移动
典型的trigger这样定义
 <Style TargetType="Button"> 
                <Setter Property="FontSize" Value="40"></Setter>
                <EventSetter  Event="Click" Handler="xx"></EventSetter>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="FontSize" Value="20"></Setter>
                        <Setter Property="Foreground" Value="blue"></Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
trigger仍在在style中定义。这个定义表示,当button有IsMouseOver的这个属性变化成True的时候,会开始对他的fontsize和foreground的属性发生变化
通过运行vs就会发现,鼠标在button上停留的时候button的字体大小会变小而且颜色会变蓝色,鼠标离开以后就会恢复回来

3.MultiTrigger
多触发器,这个意思是说只有在两个或者两个以上的属性发生变化的时候才会引发触发器,不像之前的例子一个属性变化就会引发触发器
典型语法,仍然在style中
<style>
 <Style.Triggers>
 <MultiTrigger>
                        <MultiTrigger.Conditions>//罗利条件,条件的集合,
                            <Condition Property="IsPressed" Value="true"></Condition>
                            <Condition Property="IsMouseOver" Value="true"></Condition>
                        </MultiTrigger.Conditions>
                        <Setter Property="FontStyle" Value="Italic"></Setter>//在以上条件下才发生的属性变化
                    </MultiTrigger>
</ <Style.Triggers>>
</style>

4.datatrigger

数据触发和trigger类似,不同的是 binding代替了property属性
<style>
< Style.Triggers>
<DataTrigger Binding="{Binding ElementName=tb,Path=Text.Length}" Value="0">
                        <Setter Property="IsEnabled" Value="false"></Setter>
                    </DataTrigger>
 </Style.Triggers>
</style>
这个绑定设置到了一个textbox文本控件,如果textbox控件内容为空的时候,就会引发按钮isenabled=false
当然默认启动的时候textbox内容就是为空,所以初始化的时候按钮的isenabled=false,只有文本框内容输入内容的时候按钮的isenabled才等true

此外还有一个MultiDataTrigger,可以参考3,其实一样的

深入理解          https://blog.csdn.net/lanse_my/article/details/37602547

另外分享一个绑定控件https://www.cnblogs.com/ligl/p/5636899.html    WPF      绑定ListBox和ListView

在Button样式中添加EventSetter,理解路由事件的更多相关文章

  1. C# Note16: wpf window 中添加enter和双击事件

     一.添加回车(enter)事件 在C#编程时,有时希望通过按回车键,控件焦点就会自动从一个控件跳转到下一个控件进行操作. 以用户登录为例,当输入完用户名和密码后, 需要点击登录按钮,而登录按钮必须获 ...

  2. 【WPF学习】第十三章 理解路由事件

    每个.NET开发人员都熟悉“事件”的思想——当有意义的事情发生时,由对象(如WPF元素)发送的用于通知代码的消息.WPF通过事件路由(event routing)的概念增强了.NET事件模型.事件路由 ...

  3. 为什么要在<button>元素中添加type属性

    在HTML中<button> 标签定义一个按钮. <button type="button">Click Me!</button> 在 butt ...

  4. Vue中添加新的路由并访问

    1.搭建好Vue脚手架(这里使用的版本是Vue2.0) 2.在代码编辑器(这里使用的是Sublime Text)打开项目文件夹 3.在文件目录src中的component下创建一个新的vue页面,写入 ...

  5. CSS样式中ClearBoth的理解

    在CSS中我们会经常要用到“清除浮动”Clear,比较典型的就是clear:both; CSS手册上是这样说明的:该属性的值指出了不允许有浮动对象的边.这个属性是用来控制float属性在文档流的物理位 ...

  6. WPF教程六:理解WPF中的隧道路由和冒泡路由事件

    WPF中使用路由事件升级了传统应用开发中的事件,在WPF中使用路由事件能更好的处理事件相关的逻辑,我们从这篇开始整理事件的用法和什么是直接路由,什么是冒泡路由,以及什么是隧道路由. 事件最基本的用法 ...

  7. 在Asp.Net Core中添加区域的简单实现

    使用区域,可以有效的对业务进行隔离,各种业务及分工可以更灵活.在Asp.Net Core中启用区域也是极简单的. 使用步骤: 1.在 Startup.cs 中添加区域的路由: app.UseMvc(r ...

  8. Wpf自定义路由事件

    创建自定义路由事件大体可以分为三个步骤: ①声明并注册路由事件. ②为路由事件添加CLR事件包装. ③创建可以激发路由事件的方法. 以ButtonBase类中代码为例展示这3个步骤: public a ...

  9. WPF:自定义路由事件的实现

    路由事件通过EventManager,RegisterRoutedEvent方法注册,通过AddHandler和RemoveHandler来关联和解除关联的事件处理函数:通过RaiseEvent方法来 ...

随机推荐

  1. Windows+Qt使用gRPC

    上篇文章<Windows+VS2017使用gRPC>编译出了Windows下可用的gRPC静态lib库文件,在此基础上要想在Qt上使用,需要使用MSVC2017 64bit构建组件进行构建 ...

  2. 批处理(bat)的一些记录

    总览:https://www.jb51.net/article/151923.htm 如何判断空格与回车的输入:https://www.lmdouble.com//113311107.html 设置命 ...

  3. VMware基本用法

    ###VMware tools 介绍 只有在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之前自由移动(不用 ...

  4. Innodb整体架构

    如下图展示了Innodb内存中和磁盘的结构: 内存中结构主要有如下几种: buffer pool change buffer adaptive hash index (自适应的hash索引) Log ...

  5. bat弹出确认或取消窗口

    需要在bat脚本里面弹出取消/确认框提示,可以用下面的案例: 示例: @echo off setlocal enabledelayedexpansion set Vbscript=Msgbox(&qu ...

  6. if,for,异常,random模块,计算圆周率

    一.分支结构 单分支结构 if 一般用于判断选择 score = 95 if score > 90: print('优秀') 双分支结构 if...else age = 20 if age &g ...

  7. influxdb-1.7.8(centos 7) 部署

    1.官方下载: https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm 2.安装软件 sudo yum locali ...

  8. 201871010114-李岩松《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. 莫烦TensorFlow_08 tensorboard可视化进阶

    import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # # add layer # def add_l ...

  10. Mybatis-Plus Bugs

    Mybatis-Plus Bugs 实体类中属性和数据库字段对应异常 Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'user ...