说说WPF的依赖属性
首先,我们先来大概了解一下依赖属性
什么是依赖属性:依赖属性自己没有值,通过依赖别人(如Binding)来获得值。
依赖属性为什么会出现:控件常用字段有限,包装太多属性会占用过高内存,造成浪费。所以用依赖属性,用不着就不用,用得着就用。
怎么声明依赖属性:用public static readonly三个修饰符修饰。
怎么声明实例:使用DependencyProperty.Register方法生成。此方法有三个参数跟四个参数。
怎么操作依赖属性的值:利用依赖对象(Dependency Object)的GetValue、SetValue方法实现。
现在,我们用代码来实现一下依赖属性:
XAML
<Window x:Class="DependecyProperty.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DependecyProperty"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBox />
<TextBox x:Name="testTB"/>
</StackPanel>
</Window>
声明依赖属性与引用
public class Student : DependencyObject
{ /// <summary>
/// 声明依赖属性
/// </summary>
// Using a DependencyProperty as the backing store for NameProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty NamePropertyProperty =
DependencyProperty.Register("NameProperty", typeof(string), typeof(Student)); }
引用
public MainWindow()
{
InitializeComponent();
//实例化类
Student stu = new Student();
//给依赖属性赋值
stu.SetValue(Student.NamePropertyProperty,"dfsdfsd");
//获取依赖属性的值
testTB.Text = stu.GetValue(Student.NamePropertyProperty).ToString();
}
运行程序则成功获取依赖属性的值。但不能直接在xaml中得到依赖属性的值?我们可以绑定依赖属性到文本框上
<Window x:Class="DependecyProperty.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DependecyProperty"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBox />
<!--当依赖属性改变时,文本框的字符也得到通知,实时改变 -->
<TextBox x:Name="testTB" Text="{Binding NameProperty,Mode=TwoWay}"/>
</StackPanel>
</Window>
在后置代码处绑定数据
//实例化类
Student stu = new Student();
this.DataContext = stu;
则成功获取依赖属性
可能到此处就有人问了,声明依赖属性打这么多字很麻烦,有没有方便的方法?可以通过打propdp然后按两次tab键,visual studio会自动生成依赖属性,自动生成的依赖属性的DependencyProperty.Register
(可能有观察力强的人问,新增依赖属性会产生这么多错误吗?因为途中有多个错误信息。其实这些错误是我在命名空间中声明依赖属性导致的,这是个错误的示范,无视即可)
依赖属性应用于什么场景?
依赖属性可用于场景不断变化的场景,比如一个按钮的文字在不同情况下变化。这种情况我们可以继承接口INotifyPropertyChanged,然后声明属性的变化通知。不过相对依赖属性来说,它的性能成本高,所以这样的情况就可以使用依赖属性。其它类需要使用此依赖属性的时候 ,也可以借用。一般依赖属性的应用场景是自定义控件。
说说WPF的依赖属性的更多相关文章
- WPF的依赖属性
Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩展公共语言运行时 (CLR)属性的功能,这些服务通常统称为 WPF 属性系统.由 WPF 属 ...
- wpf 的依赖属性只能在loaded 事件之后才能取到
wpf 的依赖属性只能在loaded 事件之后才能取到,在构造函数的 InitializeComponent(); 之后取不到 wpf 的依赖属性只能在loaded 事件之后才能取到,在构造函数的 ...
- WPF 中依赖属性的继承(Inherits)
WPF中依赖属性的值是是可以设置为可继承(Inherits)的,这种模式下,父节点的依赖属性会将其值传递给子节点.例如,数据绑定中经常使用的DataContextProperty: var host ...
- WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性
原文:WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性 如果你要自定义一个图片按钮控件,那么如何在主窗体绑定这个控件上图片的Source呢? ...
- WPF的依赖属性和附加属性(用法解释较全)
转:https://www.cnblogs.com/zhili/p/WPFDependencyProperty.html 一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己 ...
- WPF利用依赖属性和命令编写自定义控件
以实例讲解(大部分讲解在代码中) 1,新建一个WPF项目,添加一个用户控件之后在用户控件里面添加几个控件用作测试, <UserControl x:Class="SelfControlD ...
- WPF: 只读依赖属性的介绍与实践
在设计与开发 WPF 自定义控件时,我们常常为会控件添加一些依赖属性以便于绑定或动画等.事实上,除了能够添加正常的依赖属性外,我们还可以为控件添加只读依赖属性(以下统称"只读属性" ...
- WPF 自定义依赖属性
原博客地址:http://www.cnblogs.com/DebugLZQ/archive/2012/11/30/2796021.html DependencyObject和Dependen ...
- [转]WPF的依赖属性是怎么节约内存的
WPF升级了CLR的属性系统,加入了依赖属性和附加属性.依赖属性的使用有很多好处,其中有两点是我认为最为亮眼的: 1)节省内存的开销; 2)属性值可以通过Binding依赖于其它对象上,这就使得我的数 ...
- WPF 之 依赖属性与附加属性(五)
一.CLR 属性 程序的本质是"数据+算法",或者说用算法来处理数据以期得到输出结果.在程序中,数据表现为各种各样的变量,算法则表现为各种各样的函数(操作符是函数的简记法). ...
随机推荐
- eclipse 插件编写(二)
上篇文章简单写了下怎么新建一个eclipse插件工程,这次写一下怎么在上次的工程中添加几个菜单,如菜单栏菜单.工具栏菜单.右键菜单等. 创建一个完成的菜单需要了解三个扩展点,即menus.comman ...
- virtualbox 安装 extension pack 方法以及出现 "The installer failed with exit code 1: VBoxExtPackHelperApp.exe: error: Failed to rename the temporary directory to the final one"的解决办法
virtualbox 的版本:5.1.26 下载地址:https://www.virtualbox.org/wiki/Downloads extension pack 的版本:5.1.26 ...
- logstash performance testing
最近一直在和peformance team的同事做logstash 5.6.2的测试,主要测试两个方面:一方面测试log数据是否能全部被logstash获取与发出去,一方面测试logstash自身的c ...
- 关于 win32 下磁盘的遍历方法
最近要写个在线专杀的东东,虽然是专杀(本来只要清除几个特定的文件和杀几个特定的进程,然后把用户的注册表恢复正常,很多病毒木马最喜欢干的一件事情就是写 映像劫持 然后机器一重启,安全相关的软件全部玩完了 ...
- SYN4102型 GPS同步时钟
SYN4102型 GPS同步时钟 产品概述 SYN4102型GPS同步时钟是由西安同步电子科技有限公司精心设计.自行研发生产的一款高精度锁相时钟频率源,接收GPS信号,使恒温晶振输出频率同步于GPS ...
- dubbo源码分析02:服务引用
一.何时创建服务引用 引用官方文档的原话,如果将Dubbo托管在Spring-IOC容器下,Dubbo服务引用的时机有两个,第一个是在Spring容器调用ReferenceBean的afterProp ...
- 06、MySQL—列类型
1.整数类型 I.有符号整型 (1) Tinyint:单字节整形,系统采用一个字节来保存的整形:一个字节 = 8位,最大能表示的数值是0-255. (2) Smallint:双字节整形,系统采用两个字 ...
- 100天搞定机器学习|Day2简单线性回归分析
第一天机器学习100天|Day1数据预处理,我们学习了数据预处理.知道了,数据预处理是机器学习中最基础和最麻烦,未来占用时间最长的一步操作.数据预处理一般有六个步骤,导入库.导入数据集.处理缺失值.分 ...
- css实现超出文本溢出用省略号代替
一.单行 实现单行文本的溢出显示省略号使用text-overflow:ellipsis属性,但需要配合使用另外两个属性使用才能达到效果. 如下: overflow:hidden; text-overf ...
- HDU 4812:D Tree(树上点分治+逆元)
题目链接 题意 给一棵树,每个点上有一个权值,问是否存在一条路径(不能是单个点)上的所有点相乘并对1e6+3取模等于k,输出路径的两个端点.如果存在多组答案,输出字典序小的点对. 思路 首先,(a * ...