• 零起点学习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元素中工作,而不仅仅是依赖属性中。

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



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



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

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


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

  • 相关阅读:
    中断与异常
    轻松搞定C语言中复杂的声明
    C/C++中数组转换成指针的情况
    Linux下C程序的内存布局
    Java并发和多线程(二)Executor框架
    Java并发和多线程(一)基础知识
    java项目的划分方式:模块优先还是层优先?
    站在面试官角度看面试
    windows环境搭建禅道项目管理工具
    Linux环境搭建禅道项目管理工具
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1822624.html
Copyright © 2020-2023  润新知