WPF 学习笔记
依赖属性(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 学习笔记的更多相关文章
- WPF学习笔记-用Expression Design制作矢量图然后导出为XAML
WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...
- WPF 学习笔记-在WPF下创建托盘图标
原文:WPF 学习笔记-在WPF下创建托盘图标 首先需要在项目中引用System.Windows.Forms,System.Drawing; using System; using System.Co ...
- WPF 学习笔记-设置属性使窗口不可改变大小
原文:WPF 学习笔记-设置属性使窗口不可改变大小 调整Windows下的ResizeMode属性: ResizeMode = NoResize Resize属性是控制Windows是否可以改变大小, ...
- WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决
原文:WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决 如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行 ...
- 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)
(应博友们的需要,在文章评论处有源码链接地址,以及WPF学习资料.工具等,希望对大家有所帮助) ...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库 ...
- WPF学习笔记1---初接触
刚刚接触WPF,微软的一套东西.WPF最大的特点就是UI设计与代码逻辑的完全剥离.这样美工和程序员的分工就变得非常清楚.因为界面和程序的耦合度很低,也增加的代码的灵活性和可重用性. 微软为WPF的UI ...
- WPF学习笔记1——XAML之1
参考文献: http://msdn.microsoft.com/zh-cn/library/ms752059(v=vs.110).aspx <Pro WPF 4.5 in C# > 一.X ...
- WPF学习笔记3——Layout之1
一.概述 了解XAML的基本之后,进入Layout的学习.Layout,即布局,可能需要用到几种不同的容器.每一种容器都有各自的逻辑.在用户界面的设计过程中,很多时候是在想办法使得界面更加吸引.实在. ...
- WPF学习笔记(1):DataGrid单元格实现逐键过滤功能
最近,开始学习WPF,其UI设计完全颠覆了传统的设计理念,为程序员提供了极大的自由发挥空间,让我为之惊叹,且为之着迷.然而,WPF在国内的热度却并不高,大部分贴子都是2012年以前的,出版的图书也很少 ...
- WPF学习笔记系列之一 (布局详情)
布局:StackPanel 栈布局:控件不会拐弯且多出的不再显示.DockPanel 停靠布局 吸在上边下边或左右.WrapPanel 环绕布局 一行控件会拐弯Canvas 进行基于 ...
随机推荐
- 类似py2exe软件真的能保护python源码吗
类似py2exe软件真的能保护python源码吗 背景 最近写了个工具用于对项目中C/C++文件的字符串常量进行自动化加密处理,用python写的,工具效果不错,所以打算在公司内部推广.为了防止代码泄 ...
- nexus 数据库备份任务webhook 通知
nexus 的数据库备份是比较重要的,可以方便我们在故障的是时候进行应用恢复. 以下使用benthos 组件进行nexus 数据库备份事件的应用通知处理 环境准备 使用docker-compose 运 ...
- JS 实现Table相同行的单元格自动合并示例代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
- javascript中的立即执行函数的原理
形如 ((function Test(a) { //code here... })('Hello')); 被称作立即执行函数. 首先需要了解的是,这并不是一种hack,这是javascript的基本语 ...
- VS 自动展开选中当前代码所在的文件位置的功能
这个功能相当好,自动在Solution Explorer中展开并定位到当前代码所在的文件,免得自己找位置要找很久. 设置方法: tool>>options>>projects ...
- docker 限制container容器使用内存大小,不限制swap
docker update --memory 20g --memory-swap -1 96b14c546d98 参考:https://my.oschina.net/Kanonpy/blog/2209 ...
- mysql导入sql文件出错的一种解决方法
转:https://blog.csdn.net/u011806486/article/details/60147358 本人在本地使用navicat for mysql可以连接到服务器数据库,但是从服 ...
- 前端-JavaScript练习2
用户输入一个年份,判断这个年是否是闰年. 判断闰年条件: ① 非整百年数除以4,无余为闰,有余不闰: ② 整百年数除以400,无余为闰,有余不闰. 比如: 2000年,整百数年,就要用②公式,除以40 ...
- Kubernetes生态工具
Helm Helm 是 Kubernetes 的包管理器,它是查找.共享和使用为 Kubernetes 开发的软件的最佳方式.Helm Charts 可用于定义.安装和升级复杂的 Kubernetes ...
- 报错:Exception in thread "main" java.lang.NoClassDefFoundError: Lorg/apache/hadoop/fs/FileSystem
报错现象: Exception in thread "main" java.lang.NoClassDefFoundError: Lorg/apache/hadoop/fs/Fil ...