zoukankan      html  css  js  c++  java
  • 零起点学习WPF之《WPF揭秘》读书笔记(7)——第三章 变更通知

    3.2.2变更通知

    无论何时,只要WPF依赖属性的值发生改变,WPF就会自动根据属性的元数据触发一系列的动作,这些动作可以重新呈现适当的元素,更新当前布局,刷新数据绑定等。内建的变更通知最有趣的特性之一是属性触发器,它可以在属性值改变时执行自定义动作,而不用更改任何过程式代码。

    假设你想实现:当鼠标指针移动到一个Button上时改变Button的背景色。

    如果没有属性触发器的话:你必须注册两个事件,一个是MouseEnter  和 MouseLeave
    XMAL部分的大概的代码段如下:
    <Button MouseEnter = "" MouseLeave = "">help</Button>

    而当有了属性触发器之后,你可以完全在XAML中完成相应的行为。下面的Trigger就是需要的全部代码:

    <Trigger Property = "IsMouseOver" Value ="true">
    <Setter Property ="Foreground" Value = "blue"/>
    </Trigger>

    这个触发器能够基于Button的IsMouseOver属性工作的,当MouseEnter时间触发时,IsMouseOver属性它会变成true,当MouseLeave触发时 IsMouseOver又会变成false。
    【注意:当IsMouseOver 变成false时,不用把Foreground变成黑色,因为它是WPF自动完成的】
    那么我们现在惟一需要做的就是把Trigger应用到每一个Button上,然后不幸的是,由于WPF3.0的人为限定不能把属性触发器【直接】应用到Button这样的元素上,他们只能在style 对象内部使用,但是我们可以这样做。

    代码
    <Button MinWidth = "75" Margin ="10" >
    <Button.Style>
    <Style TargetType = "{x:Type Button}">
    <Style.Triggers>
    <Trigger Property ="IsMouseOver" Value = "true">
    <Setter Property = "Foreground"Value = "blue" />
    </Trigger>
    </Style.Triggers>
    </Style>
    </Button.Style>
    OK
    </Button>

    属性触发器仅仅是WPF支持的3种触发器之一,数据触发器是属性触发器的另一种形式,它可以在任何.NET元素中工作,而不仅仅是依赖属性中。

    事件触发器会通过声明方式指定动作,该动作在路由时间触发时生效。



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    逻辑卷管理LVM (Logical Volume Manager)
    Windows Server 2008 R2 域控修改域用户密码复杂性
    win7 加域开机自动登录域用户
    红帽Linux 配置VNC桌面远程工具
    Redhat linux 挂载命令mount
    SUSE Linux 防火墙设置
    IPv4 地址分类
    常用RAID简介_001
    Element UI
    ie中datepicker赋值不成功
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1822624.html
Copyright © 2011-2022 走看看