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中的附加属性的定义,以及使用。的更多相关文章

  1. WPF中PasswordBox控件无法绑定Password属性解决办法

    在WPF中,默认的Password控件的Password属性是不允许为之绑定的,下面是一个解决绑定Password的方法的代码: 1.前台代码 <Window x:Class="Pas ...

  2. WPF MVVM从入门到精通5:PasswordBox的绑定

    原文:WPF MVVM从入门到精通5:PasswordBox的绑定   WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通 ...

  3. [WPF]实现密码框的密码绑定

    正如绑定TextBox控件的Text属性一样, 我们希望能够将PasswordBox空间的Password属性进行绑定, 比如在MVVM模式中,这似乎是必须的, 但可惜的是, Password属性是不 ...

  4. 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程

    简述C#中IO的应用   在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...

  5. 封装:WPF中可以绑定的BindPassWord控件

    原文:封装:WPF中可以绑定的BindPassWord控件 一.目的:本身自带的PassWord不支持绑定 二.Xaml部分 <UserControl x:Class="HeBianG ...

  6. WPF中的命令与命令绑定(二)

    原文:WPF中的命令与命令绑定(二) WPF中的命令与命令绑定(二)                                              周银辉在WPF中,命令(Commandi ...

  7. WPF中的命令与命令绑定(一)

    原文:WPF中的命令与命令绑定(一)   WPF中的命令与命令绑定(一)                                           周银辉说到用户输入,可能我们更多地会联想到 ...

  8. WPF 中双向绑定通知机制之ObservableCollection使用

    msdn中   ObservableCollection<T> 类    表示一个动态数据集合,在添加项.移除项或刷新整个列表时,此集合将提供通知. 在许多情况下,所使用的数据是对象的集合 ...

  9. WPF中PasswordBox控件的Password属性的数据绑定

    原文:WPF中PasswordBox控件的Password属性的数据绑定 英文原文:http://www.wpftutorial.net/PasswordBox.html 中文原文:http://bl ...

随机推荐

  1. java随堂笔记

    JAVA 1只要是字符串,必然就是对象. 2API文档的基本使用 3如何创建字符串: a直接赋值双引号,也是一个字符串对象. b可以通过new关键字来调用String的构造方法 public Stri ...

  2. 启动spring boot项目时报错:java.lang.ClassNotFoundException: javax.servlet.Filter

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  3. Java中如何保证线程顺序执行

    只要了解过多线程,我们就知道线程开始的顺序跟执行的顺序是不一样的.如果只是创建三个线程然后执行,最后的执行顺序是不可预期的.这是因为在创建完线程之后,线程执行的开始时间取决于CPU何时分配时间片,线程 ...

  4. java数组 简单了解

    一.关于集合 1.数组,链表和哈希表(散列表)的存储方式 (1)传统的数组结构存储数据会在内存中开辟连续得空间,结合下标从而使得可以快速访问数据,但是删除和添加数据就很浪费资源 (2)链表不需要开辟连 ...

  5. uboot1: 启动流程和移植框架

    目录 0 环境 1 移植框架 3 执行流程 3.0 链接地址 3.1 start.S, 入口 3.2 __main 3.3 board_init_f()和init_sequence_f[] 3.4 r ...

  6. MySQL库表设计小技巧

    前言: 在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名.字段名命名混乱.字段类型设计混乱等等,此类数据库后续极难维护与拓展.我一直相信只有优秀的库表设计 ...

  7. C# 给PDF签名时添加时间戳的2种方法(附VB.NET代码)

    在PDF添加签名时,支持添加可信时间戳来保证文档的法律效应.本文,将通过C#程序代码介绍如何添加可信时间戳,可通过2种方法来实现.文中附上VB.NET代码,有需可供参考. 一.程序运行环境 编译环境: ...

  8. Java集合详解(五):Hashtable原理解析

    概述 本文是基于jdk8_271版本进行分析的. Hashtable与HashMap一样,是一个存储key-value的双列集合.底层是基于数组+链表实现的,没有红黑树结构.Hashtable默认初始 ...

  9. vim使用基础

    vi/vim编辑器使用 前言 There is an old joke about a visitor to New York City asking a passerby for direction ...

  10. 070.Python聚焦爬虫数据解析

    一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...