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. Linux用户和权限——用户和用户组管理

    Linux用户和权限——用户和用户组管理 摘要:本文主要介绍了Linux系统中的用户和用户组管理. 用户和用户组 含义 在使用Linux系统时,虽然输入的是自己的用户名和密码,但其实Linux并不认识 ...

  2. 8 Best DDoS Attack Tools (Free DDoS Tool Of The Year 2019)

    #1) HULK Description: HULK stands for HTTP Unbearable Load King. It is a DoS attack tool for the web ...

  3. Android RadioButton控件

    RadioButton   单选按钮 常用属性: text 文本 checked=“true” 默认选中 一组互斥的单选按钮要放在RadioGroup中.RadioGroup常用属性: orienta ...

  4. [20190505]ts 命令在哪里.txt

    [20190505]ts 命令在哪里.txt --//在论坛问一下ts命令在哪里?没人解答,自己也google看了一下:https://unix.stackexchange.com/questions ...

  5. Django 使用 mysql 数据库连接

    启用 mysql 数据库连接 修改 app01 下的 __init__.py import pymysql pymysql.install_as_MySQLdb() 修改 settings.py DA ...

  6. 简单使用:SpringBoot整合Redis

    1.导入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  7. Rust中的哈希Map

    严谨! fn main() { use std::collections::HashMap; let mut scores = HashMap::new(); scores.insert(String ...

  8. linux (06) redis安装

    redis安装 一.在linux安装redis,通过源码编译安装redis 1.下载源码包 wget http://download.redis.io/releases/redis-4.0.10.ta ...

  9. 201871010101-陈来弟《面向对象程序设计(JAVA)》 第14周学习总结

    实验十二  Swing图形界面组件(一) 实验时间 2019-11-29 第一部分:基础知识 Swing和MVC设计模式 (1)设计模式(Design pattern)是设计者一种流行的 思考设计问题 ...

  10. 201871010105-曹玉中《面向对象程序设计(java)》第十三周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...