Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >学习WPF——初识依赖项属性

学习WPF——初识依赖项属性

作者头像
liulun
发布于 2018-01-12 06:56:54
发布于 2018-01-12 06:56:54
9950
举报
文章被收录于专栏:liulunliulun

入门

首先创建一个依赖项属性

然后绑定父容器的DataContext到这个依赖项的实例

接着绑定子元素的属性到依赖项属性(注意Button的Content属性)

程序最终的运行结果:

说明

首先是定义表示属性的对象,一个依赖项属性的对象必然是DependencyProperty的实例 这个实例必须始终保持可用,所以这里定义为静态字段

根据约定,依赖项属性的字段名称使用Property结尾,上面例子使用的是NameProperty

依赖项属性实例的创建工作必须在使用之前完成,所以要么在定义的时候即完成实例化工作,要么在静态构造函数中完成这项工作

DependencyProperty没有公有的构造函数,必须使用DependencyProperty的Register函数来创建实例

依赖项属性实例创建出来之后,不允许修改,所以上面例子中NameProperty是只读的

最后一部是使用传统的.NET属性来封装WPF依赖项属性

不应该在.NET属性包装的时候添加验证属性值的代码、引发事件的代码

位于最顶端的元素,某一个属性设置了值,他的子元素也会继承这个属性的值

下面的例子中,我们设置Window元素的FontSize为30,这样Button的FontSize的属性值虽然没有设置

但他自动继承了Window的相关设置的值

(这非常像HTML中的样式设置)

如果我们不希望值继承的特性影响子元素的属性,那么只要给子元素相关属性设置你期望的值即可

但需要注意的是:

并不是所有的依赖项属性都有值继承的特性

总结

WPF中的依赖项属性和winform的属性起到的作用是一样的,但实现的机制却有着较大的区别

最主要的区别是WPF中的依赖项属性的值是存储在一个全局的哈希字典中的

这样做的好处是:

节约内存

winform中的90%的控件属性都存在默认值,为每个属性存储一个字段将是对内存的巨大浪费,依赖项属性系统仅存储改变过的值,对于默认值来说仅仅存储一次

值继承

当访问一个依赖属性的值时。如果当前没有值,则依赖属性会遍历整个逻辑树直至它找到一个值。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-01-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入浅出话属性
程序的本质就是“数据+算法”,或者说用算法来操作数据来得到自己想要的结果。在程序中,数据表现为各种各样的变量,算法则表现为各种各样的函数(操作符是函数的简记法)。即使是到了面向对象时代有了类等数据结构的出现,这一本质仍然没有改变---类的作用只是将散落在程序中的变量和函数进行归档封装并控制对它们的访问而已。被封装在类中的变量称为字段,它表示的是类或实例的状态;被封装在类里的函数叫做方法,它表示的是类或实例的功能。字段和类构造出了最原始的面向对象封装,这时候的面向对象中还不包含事件,属性等概念。
莫问今朝
2018/08/31
9650
深入浅出话属性
剖析依赖属性
这节来讲一下WPF中的依赖属性 (Dependency Property)。
宿春磊Charles
2021/11/05
4810
[UWP]依赖属性1:概述
依赖属性(DependencyProperty)是UWP的核心概念,它是有DependencyObject提供的一种特殊的属性。由于UWP的几乎所有UI元素都是集成于DependencyObject的FramewordElement,并且这些UI元素的几乎所有属性及它们出现在XAML中的几乎所有属性都是依赖属性,所以可以说依赖属性是专门为UI设计的属性系统。
dino.c
2019/01/18
7130
[UWP]依赖属性1:概述
一站式WPF--依赖属性(DependencyProperty)一
  这段是MSDN上对依赖属性(DependencyProperty)的描述。主要介绍了两个方面,WPF中提供了可用于扩展CLR属性的服务;被这个服务支持的属性称为依赖属性。
JusterZhu
2023/09/18
8560
一站式WPF--依赖属性(DependencyProperty)一
WPF 桌面端开发 8-DependencyProperty
在Resources和Data binding中,XAML 提供了这样一种语法,来为属性赋值:
码客说
2020/05/09
7820
[WPF]浅析依赖属性(DependencyProperty)
在WPF中,引入了依赖属性这个概念,提到依赖属性时通常都会说依赖属性能节省实例对内存的开销。此外依赖属性还有两大优势。
czwy
2023/10/22
6060
[WPF]浅析依赖属性(DependencyProperty)
一站式WPF--依赖属性(DependencyProperty)二
 书接上文,前篇文章介绍了依赖属性的原理和实现了一个简单的DependencyProperty(DP),这篇文章主要探讨一下如何使用DP以及有哪些需要注意的地方。
JusterZhu
2023/09/18
6780
一站式WPF--依赖属性(DependencyProperty)二
【我们一起写框架】MVVM的WPF框架之绑定(二)
上一篇我们已经一起编写了框架的基础结构,并且实现了ViewModel反向控制Xaml窗体。
Kiba518
2018/09/28
2K0
【我们一起写框架】MVVM的WPF框架之绑定(二)
造轮子了!NETCore跨平台UI框架,CPF
CPF(暂时命名)(Cross platform framework),模仿WPF的框架,支持NETCore的跨平台UI框架,暂时不够完善,只用于测试,暂时只支持Windows和Mac。支持数据绑定,CSS,动画。。。
梁规晓
2019/11/07
1.8K0
造轮子了!NETCore跨平台UI框架,CPF
[WPF自定义控件]从ContentControl开始入门自定义控件
我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中(只有一点小区别)。这篇文章的目的是快速入门自定义控件的开发,所以尽量精简了篇幅,更深入的概念在以后介绍各控件的文章中实际运用到才介绍。
dino.c
2019/05/17
4.2K0
WPF 依赖属性绑定不上调试方法
在写 WPF 程序的时候会遇到依赖属性绑定了,但是值没有更新或者没有绑定上的问题,本文告诉大家可以如何调试
林德熙
2020/07/06
1.7K0
Silverlight:Dependency Property(依赖属性)学习笔记
学习SL/WPF,Dependency Properties(依赖属性)是一个全新(陌生)但又无法回避的概念。 http://www.wpftutorial.net/DependencyPropert
菩提树下的杨过
2018/01/23
7090
Silverlight:Dependency Property(依赖属性)学习笔记
学习WPF——WPF布局——了解布局容器
WPF布局工作内部原理 WPF渲染布局时主要执行了两个工作:测量和排列 测量阶段,容器遍历所有子元素,并询问子元素所期望的尺寸 排列阶段,容器在合适的位置放置子元素,并设置元素的最终尺寸 这是
liulun
2018/01/12
2.4K0
学习WPF——WPF布局——了解布局容器
WPF自学入门(七)WPF 初识Binding
今天记录一下Binding的基础和具体的使用方法,说起这个Binding,在WPF中,Binding是很重要的特征,在传统的Windows软件来看,大多数都是UI驱动程序的模式,也可以说事件驱动程序,这个程序模式在工作过几年的程序员中是根深蒂固的,WPF作为Winform的升级,它把UI驱动程序彻底改变了,核心回到了数据驱动程序的模式上面,这样,程序就回到了算法和数据。数据,才是真正需要重点处理的!
黄昏前黎明后
2019/09/11
1.7K0
WPF自学入门(七)WPF 初识Binding
WPF依赖属性(wpf 依赖属性)
依赖属性就是一种自己可以没有值,并且可以通过绑定从其他数据源获取值。依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值。
全栈程序员站长
2022/07/28
2.3K0
WPF依赖属性(wpf 依赖属性)
win10 uwp 依赖属性
本文告诉大家如何使用依赖属性,包括在 UWP 和 WPF 如何使用。 本文不会告诉大家依赖属性的好处,只是简单告诉大家如何使用。
林德熙
2018/09/19
8870
win10 uwp 依赖属性
WPF --- 如何以Binding方式隐藏DataGrid列
先在ViewModel创建数据源 People 和控制列隐藏的 IsVisibility,这里直接以 MainWindow 为 DataContext
Niuery Diary
2023/11/23
7480
WPF --- 如何以Binding方式隐藏DataGrid列
[翻译] WPF 中用户控件 DataContext/Binding 和依赖属性的问题
ProgrammingDude(asked Dec 8, 2015 at 21:24)
独立观察员
2022/12/06
1.1K0
WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了
如果你写了一个 MarkupExtension 在 XAML 当中使用,你会发现你在 MarkupExtension 中定时的属性是无法使用 XAML 绑定的,因为 MarkupExtension 不是一个 DependencyObject。
walterlv
2020/02/10
1.9K0
WPF快速入门系列(1)——WPF布局概览
  关于WPF早在一年前就已经看过《深入浅出WPF》这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中主要的几个不同的特性,如依赖属性、命令、路由事件等。
zls365
2020/11/10
3.2K0
WPF快速入门系列(1)——WPF布局概览
相关推荐
深入浅出话属性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档