由一次PasswordBox密码绑定引发的疑问 ---> WPF中的附加属性的定义,以及使用。
1,前几天学习一个项目的时候,遇到了PasswordBox这个控件,由于这个控件的Password属性,不是依赖属性,所以不能和ViewModel层进行数据绑定。
2,但是要实现前后端彻底的分离,就需要绑定,那么下面我的本文的主角“附加属性”就要出场了。
3,附加属性的概念,就是类(控件类)本身没有这个属性,我们给它一个我们定义的属性。那是怎么给的呢?
4,怎么给的,刚开始我也很迷惑,其实就是在xmal文件中,在控件属性中,直接写上我们定义的附加属性就好(放心,编辑器是不会报错的)。
5,附加属性,是一个属性,属性必须依附于类,也就是我们要来定义一个类,来容纳我们的附加属性。

要定义一个附加属性,需要这么多的代码,别担心,这些代码不需要您手动敲出来,在vs的类中,找一个合适的地方,输入“propa”,然后根据编辑器的提示,按两次Tab键,
编辑器会自动帮助您完成这些代码。然后再次按Tab键,编辑器会引导您做“完形填空”(不会完型填空的朋友,您可以查下资料,本文不再赘述),直到您按下Enter键,这个附加属性就创建完成了。
(此处的CallBack方法,是我自己定义的,不是自动生成的。什么?你说我为什么知道CallBack的参数是DependencyObject和DependencyPropertyChangedEventArgs,为什么知道CallBack可以放到
PropertyMetadata的构造函数中,因为我查从源数据了啊 ^-^ ^-^,查看下PropertyMetadata的定义就知道了(使用方法后面讲)。
注意,注意,注意(重要的话说三遍,否则你的下一步将无法进行!!!)
上面定义的类,它的文件位置在这里:

7,附加属性定义好了,怎么来使用它呢?也是一个问题,我到现在还是没有完全扭转过来这个思维,惭愧!!!下面讲一下怎么来使用它:

在窗体中,定义一个Rectangle,在Rectangle的属性中,写上我们定义的附加属性,大胆写,尽管写,不会出错的。
因为我们定义的类,存在于名称空间WpfTest中,而WpfTest在xaml映射在local,因此我们的附加属性Height存在于local:AttachProperty.Height,
第一次使用这个附加属性的时候,编辑器会报错,提示“命名空间clr-namespace:WpfTest中不存在AttachProperty名称”,

如果确定文件位置是对的,先不用管这句话,运行之后,就不会再报错了,为什么会这样,请路过的大神,帮忙指点一二,非常感激。
8,来到主窗体的构造函数内,写下这句话:

然后启动窗体,可以看到,窗体内矩形的高,由xaml中设置的50变成了我们再构造器中设置的100,那么就是说这个附加属性对于描绘矩形起效了(注意再xaml中是双向绑定)。
后记:在第五步中,我们定义了一个附加属性,并且定义了一个CallBack委托,当值发生变化的时候,我们在委托方法中,就可以去到附加属性的值,可以在这里编写我们的业务逻辑。
由一次PasswordBox密码绑定引发的疑问 ---> WPF中的附加属性的定义,以及使用。的更多相关文章
- WPF中PasswordBox控件无法绑定Password属性解决办法
在WPF中,默认的Password控件的Password属性是不允许为之绑定的,下面是一个解决绑定Password的方法的代码: 1.前台代码 <Window x:Class="Pas ...
- WPF MVVM从入门到精通5:PasswordBox的绑定
原文:WPF MVVM从入门到精通5:PasswordBox的绑定 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通 ...
- [WPF]实现密码框的密码绑定
正如绑定TextBox控件的Text属性一样, 我们希望能够将PasswordBox空间的Password属性进行绑定, 比如在MVVM模式中,这似乎是必须的, 但可惜的是, Password属性是不 ...
- 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程
简述C#中IO的应用 在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...
- 封装:WPF中可以绑定的BindPassWord控件
原文:封装:WPF中可以绑定的BindPassWord控件 一.目的:本身自带的PassWord不支持绑定 二.Xaml部分 <UserControl x:Class="HeBianG ...
- WPF中的命令与命令绑定(二)
原文:WPF中的命令与命令绑定(二) WPF中的命令与命令绑定(二) 周银辉在WPF中,命令(Commandi ...
- WPF中的命令与命令绑定(一)
原文:WPF中的命令与命令绑定(一) WPF中的命令与命令绑定(一) 周银辉说到用户输入,可能我们更多地会联想到 ...
- WPF 中双向绑定通知机制之ObservableCollection使用
msdn中 ObservableCollection<T> 类 表示一个动态数据集合,在添加项.移除项或刷新整个列表时,此集合将提供通知. 在许多情况下,所使用的数据是对象的集合 ...
- WPF中PasswordBox控件的Password属性的数据绑定
原文:WPF中PasswordBox控件的Password属性的数据绑定 英文原文:http://www.wpftutorial.net/PasswordBox.html 中文原文:http://bl ...
随机推荐
- 【JavaScript】Leetcode每日一题-青蛙过河
[JavaScript]Leetcode每日一题-青蛙过河 [题目描述] 一只青蛙想要过河. 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有). 青蛙可以跳上石子 ...
- 【TensorFlow】使用Object Detection API 训练自己的数据集报错
错误1: 训练正常开始后,能正常看到日志输出,但中途报错 ResourceExhaustedError (see above for traceback): OOM when allocating ...
- 有哪些适用于律师事务所的CRM系统?
中国的经济发展和政治稳定给律师行业带来了巨大的空间.而互联网的发展也让律师事务所遍地开花.如何在大大小小的律所中脱颖而出,是每个律所都迫切需要解决的问题.为了让您的律师事务所在激烈的竞争中脱颖而出,今 ...
- Linux VMware Tools详解
VMware Tools描述 VMware Tools 中包含一系列服务和模块,可在 VMware 产品中实现多种功能,从而使用户能够更好地管理客户机操作系统,以及与客户机系统进行无缝交互. 在Lin ...
- [刷题] 220 Contains Duplicate III
要求 给出整型数组nums和整数k,是否存在索引i和j 使得nums[i]和nums[j]之差不超过t,且i和j之差不超过k 思路 建立k个元素的有序查找表 每次有新元素加入,寻找查找表中大于 num ...
- 《SystemVerilog验证-测试平台编写指南》学习 - 第3章 过程语句和子程序
<SystemVerilog验证-测试平台编写指南>学习 - 第3章 过程语句和子程序 3.1 过程语句 3.2 任务.函数以及void函数 3.3 任务和函数概述 3.4 子程序参数 3 ...
- Docker Swarm(十)Portainer 集群可视化管理
前言 搭建好我们的容器编排集群,那我们总不能日常的时候也在命令行进行操作,所以我们需要使用到一些可视化的工具,Docker图形化管理提供了很多工具,有Portainer.Docker UI.Shipy ...
- vi/vim输入中文乱码,无法输入中文解决方法
vi/vim输入中文乱码,无法输入中文解决方法 编辑/etc/vimrc或者/etc/virc,加入以下内容即可 set encoding=UTF-8 set langmenu=zh_CN.UTF-8 ...
- Ubuntu 18.04安装 Adob Flash player
1.Ctrl + Alt + T 打开命令终端,启用Canonical Partners Repository存储库 (最新的Flash插件位于Canonical Partners的存储库中,默认情况 ...
- Linux 文件隐藏属性-创建文件默认权限
Linux特殊权限介绍 # password原本只有root可以访问但是为什么普通用户在修改密码的时候也可以改里面的内容. [root@gong ~]# ll /usr/bin/passwd -rws ...