专栏首页liulun学习WPF——初识依赖项属性

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

入门

首先创建一个依赖项属性

然后绑定父容器的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%的控件属性都存在默认值,为每个属性存储一个字段将是对内存的巨大浪费,依赖项属性系统仅存储改变过的值,对于默认值来说仅仅存储一次

值继承

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 学习WPF——了解WPF中的XAML

    XAML的简单说明 XAML是用于实例化.NET对象的标记语言,主要用于构建WPF的用户界面 XAML中的每一个元素都映射为.NET类的一个实例,例如<B...

    liulun
  • 学习WPF——WPF布局——了解布局容器

    WPF布局工作内部原理 WPF渲染布局时主要执行了两个工作:测量和排列 测量阶段,容器遍历所有子元素,并询问子元素所期望的尺寸 排列阶段,容器在合适的位置...

    liulun
  • 【翻译】WPF4.5新特性(MSDN的翻译读不太懂)

    我很在意WPF的发展,有人说微软不再维护WPF了,无所谓,随他去。 MSDN上有简体版:http://msdn.microsoft.com/zh-cn/libr...

    liulun
  • 达观数据前端分享:理解 JavaScript 中的对象的属性

    在达观数据的前端工作中,对象的属性是经常接触和使用的,正好最近重温了一下《JavaScript 高级程序设计》,把书中理解对象属性的部分整理一下与大家分享。 ...

    达观数据
  • 前端基础-CSS属性选择器

    cwl_java
  • 【Rust每周一知】 Attribute 属性

    Rust 中的属性数量非常多。而且具有可扩展性(可自定义属性)。Rust 的属性语法遵从 C# 定义并标准化了的属性规范ECMA-334。

    MikeLoveRust
  • [UWP]依赖属性1:概述

    依赖属性(DependencyProperty)是UWP的核心概念,它是有DependencyObject提供的一种特殊的属性。由于UWP的几乎所有UI元素都是...

    dino.c
  • 18.Swift学习之属性与方法

    YungFan
  • 《OEA - 实体扩展属性系统 - 设计方案说明书》

        这篇设计文档是 12 月份写来参加公司的研发峰会的,自己倒是信心满满,不过最后还是没有入围。现在想想也没啥大用,所以贴出来,期待与园友交流。     文...

    用户1172223
  • Workbook工作簿对象属性

    Activeworkbook.name表示当前活动工作簿的name属性,即当前excel文件的名称为vba.xlsm。

    无言之月

扫码关注云+社区

领取腾讯云代金券