依赖属性(Dependency Property)

相比较于普通属性,依赖属性有以下特点:

  • 变化通知(change notification)
  • 节省内存
  • 使用某种带优先级决定策略(resolution strategy)来读取属性的值。
    属性值可以依赖于其他对象,适用于数据绑定,属性值继承等场景。

依赖属性的声明

  • 宿主必须是 DependencyObject 的子类。
  • 使用 DependencyProperty 类型声明依赖属性。(public static readonly)
  • 使用 DependencyProperty.Register 方法注册依赖属性。
  • 使用属性包装器包装依赖属性(调用 GetValue, SetValue)。

附加属性(Attached Property)

附加属性是所处环境(上级元素)所附加的属性,是一种特殊的依赖属性。

  • 宿主必须是 DependencyObject 的子类。
  • 使用 DependencyProperty 类型声明依赖属性。(public static readonly)
  • 使用 DependencyProperty.RegisterAttached 方法注册附加属性。
  • 使用静态方法 GetXXX, SetXXX 存取附加属性(调用 GetValue, SetValue)。

路由事件(Routed Events)

路由事件被用来实现事件的路由功能。

路由事件的声明

  • 宿主必须是 FrameworkElement 的子类。
  • 使用 RoutedEvent 类型声明路由事件。(public static readonly)
  • 使用 EventManager.RegisterRoutedEvent 方法注册路由事件。
  • 使用标准 .NET 事件声明机制包装路由事件(add, remove)。

路由策略

  • 直接:事件由事件源直接触发。
  • 冒泡:由事件源逐级向上传递直至根元素。
  • 隧道:由根元素逐级向下传递直至事件源。
    隧道事件名通常以 Preview 打头。

附加事件(Attached Event)

由下级元素的冒泡事件附加的事件。

数据绑定(Data Binding)

通过在目标对象的目标属性中设定绑定源及其值路径(属性名 Path=)来实现数据绑定。

绑定其他界面元素

  • 指定界面元素名作为绑定源。(ElementName=)
  • 绑定模式(方向 Mode=)
    • OneWay:单向,源属性到目标属性
    • TwoWay:双向,源属性到目标属性,目标属性到源属性
    • OneTime:单向,源属性到目标属性,仅限一次
    • OneWayToSource:单向,目标属性到源属性
    • Default:由目标对象元数据决定
  • 方向为目标属性到源属性时触发源属性更新的因素(UpdateSourceTrigger=)
    • PropertyChanged:目标属性变更时
    • LostFocus:目标属性变更后且失去焦点时
    • Explicit:明确调用 UpdateSource 方法时
    • Default:由源属性元数据决定

绑定数据源

指定资源或对象作为绑定源。(Source=)

绑定相对数据源

寻找某个与自身存在某种相对位置关系的元素,把它作为绑定源。(RelativeSource=)

  • 绑定模式(目标 Mode=)

    • Self:自身
    • FindAncestor:上级元素
    • PreviousData
    • TemplatedParent
  • 绑定模式为上级元素时需要满足的条件
    • 指定上级元素的种类(AncestorType=)
    • 找到第n个指定种类的上级元素(AncestorLevel=)

绑定数据上下文

没有指定数据源时,逐级向上寻找上级元素的 DataContext 属性,该属性非空时把它作为绑定源。

命令(Command)

  • ICommand 接口
  • RoutedCommand 类
  • RoutedUICommand 类

WPF 学习笔记的更多相关文章

  1. WPF学习笔记-用Expression Design制作矢量图然后导出为XAML

    WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...

  2. WPF 学习笔记-在WPF下创建托盘图标

    原文:WPF 学习笔记-在WPF下创建托盘图标 首先需要在项目中引用System.Windows.Forms,System.Drawing; using System; using System.Co ...

  3. WPF 学习笔记-设置属性使窗口不可改变大小

    原文:WPF 学习笔记-设置属性使窗口不可改变大小 调整Windows下的ResizeMode属性: ResizeMode = NoResize Resize属性是控制Windows是否可以改变大小, ...

  4. WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决

    原文:WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决 如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行 ...

  5. 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)

    (应博友们的需要,在文章评论处有源码链接地址,以及WPF学习资料.工具等,希望对大家有所帮助) ...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库 ...

  6. WPF学习笔记1---初接触

    刚刚接触WPF,微软的一套东西.WPF最大的特点就是UI设计与代码逻辑的完全剥离.这样美工和程序员的分工就变得非常清楚.因为界面和程序的耦合度很低,也增加的代码的灵活性和可重用性. 微软为WPF的UI ...

  7. WPF学习笔记1——XAML之1

    参考文献: http://msdn.microsoft.com/zh-cn/library/ms752059(v=vs.110).aspx <Pro WPF 4.5 in C# > 一.X ...

  8. WPF学习笔记3——Layout之1

    一.概述 了解XAML的基本之后,进入Layout的学习.Layout,即布局,可能需要用到几种不同的容器.每一种容器都有各自的逻辑.在用户界面的设计过程中,很多时候是在想办法使得界面更加吸引.实在. ...

  9. WPF学习笔记(1):DataGrid单元格实现逐键过滤功能

    最近,开始学习WPF,其UI设计完全颠覆了传统的设计理念,为程序员提供了极大的自由发挥空间,让我为之惊叹,且为之着迷.然而,WPF在国内的热度却并不高,大部分贴子都是2012年以前的,出版的图书也很少 ...

  10. WPF学习笔记系列之一 (布局详情)

    布局:StackPanel  栈布局:控件不会拐弯且多出的不再显示.DockPanel   停靠布局 吸在上边下边或左右.WrapPanel    环绕布局   一行控件会拐弯Canvas  进行基于 ...

随机推荐

  1. Combat 战斗任务

    发售年份 1977 平台 VCS 开发商 雅达利(Atari) 类型 射击 https://www.youtube.com/watch?v=2LxPEdUZOkE

  2. layui layui.open弹窗后按enter键不停弹窗问题的解决

    问题描述:layui.open弹窗后,点击enter键会不停弹窗,背景颜色变得越来越深 解决办法:1.使用回调函数让按钮失去焦点 var info = layer.open({ type: 2 , t ...

  3. 19.2 MEMORY CONTROLLER

    在存储控制器的BANKCONTROLREGISTER(BANKCONn: GCS6-nGCS7)表中:中文翻译各个寄存器的位出现错误: 原文中正确的表述见下图:

  4. Angular2+AngularJS

    AngularJS 系列: 1.angular.module 的定义 var mapApp = angular.module("positionSalaryEditApp",[&q ...

  5. 解决STM32 I2C接口死锁在BUSY状态的方法讨论

    关于STM32的I2C接口死锁在BUSY状态无法恢复的现象,网上已有很多讨论,看早几年比较老的贴子,有人提到复位MCU也无法恢复.只有断电才行的状况,那可是相当严重的问题.类似复位也无法恢复的情况是存 ...

  6. DNS缓存服务器与转发服务器

    DNS缓存服务器与转发服务器 什么是缓存服务器(cache-only) 缓存服务器只需要根区域解析库文件,不包含任何其它区域解析库文件,这样的服务器就叫着缓存服务器.这样的服务器只有缓存搜寻结果的功能 ...

  7. python爬虫---selenium库的用法

    python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...

  8. 小梵同学 GO!

    刘德翠 1. Vue.js实战读书笔记(1) 2.Vue.js实战读书笔记--计算属性 3. Vue.js实战读书笔记--v-bind及class与style绑定 4. Vue.js实战读书笔记--内 ...

  9. Spring配置从配置文件读取属性值

    spring将properties文件读取后在配置文件中直接将对象的配置信息填充到bean中的变量里. 原本使用PropertyPlaceholderConfigurer类进行文件信息配置.Prope ...

  10. 使用velodyne16线激光雷达跑loam-velodyne

    一.velodyne-VLP16使用教程 推荐网址: http://blog.csdn.net/littlethunder/article/details/51920681 https://www.c ...