原文:封装:WPF中可以绑定的BindPassWord控件

一、目的:本身自带的PassWord不支持绑定

二、Xaml部分


  1. <UserControl x:Class="HeBianGu.General.WpfControlLib.BindPassWordBox"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  6. xmlns:local="clr-namespace:HeBianGu.General.WpfControlLib"
  7. mc:Ignorable="d"
  8. d:DesignHeight="50" d:DesignWidth="300">
  9. <Grid>
  10. <PasswordBox x:Name="pb_center" PasswordChanged="pb_center_PasswordChanged" />
  11. </Grid>
  12. </UserControl>

三、代码部分


  1. /// <summary> 可以绑定的密码框 </summary>
  2. public partial class BindPassWordBox : UserControl
  3. {
  4. PasswordBox _password = null;
  5. private void pb_center_PasswordChanged(object sender, RoutedEventArgs e)
  6. {
  7. this.PassWord = this._password.Password;
  8. }
  9. public BindPassWordBox()
  10. {
  11. InitializeComponent();
  12. }
  13. public string PassWord
  14. {
  15. get { return (string)GetValue(PassWordProperty); }
  16. set { SetValue(PassWordProperty, value); }
  17. }
  18. // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
  19. public static readonly DependencyProperty PassWordProperty =
  20. DependencyProperty.Register("PassWord", typeof(string), typeof(BindPassWordBox), new PropertyMetadata(default(string), (d, e) =>
  21. {
  22. BindPassWordBox control = d as BindPassWordBox;
  23. if (control == null) return;
  24. string config = e.NewValue as string;
  25. if (control._password == null) return;
  26. control._password.Password = config;
  27. SetPasswordBoxSelection(control._password, config.Length, 0);
  28. }));
  29. private static void SetPasswordBoxSelection(PasswordBox passwordBox, int start, int length)
  30. {
  31. var select = passwordBox.GetType().GetMethod("Select",
  32. BindingFlags.Instance | BindingFlags.NonPublic);
  33. select.Invoke(passwordBox, new object[] { start, length });
  34. }
  35. }

四、原理

封装一层PassWordBox控件,自定义依赖属性,在PassWordBox的Changed事件中赋值依赖属性

SetPasswordBoxSelection(control._password, config.Length, 0);

此方法用来设置光标,否则输入后光标位置不正确

封装:WPF中可以绑定的BindPassWord控件的更多相关文章

  1. WPF中不规则窗体与WindowsFormsHost控件的兼容问题完美解决方案

    首先先得瑟一下,有关WPF中不规则窗体与WindowsFormsHost控件不兼容的问题,网上给出的解决方案不能满足所有的情况,是有特定条件的,比如  WPF中不规则窗体与WebBrowser控件的兼 ...

  2. WPF中不规则窗体与WebBrowser控件的兼容问题解决办法

    原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...

  3. WPF 中动态创建和删除控件

    原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件.FindName(" ...

  4. WPF 将数据源绑定到TreeView控件出现界面卡死的情况

    首先来谈一下实现将自定义的类TreeMode绑定到TreeView控件上的一个基本的思路,由于每一个节点都要包含很多自定义的一些属性信息,因此我们需要将该类TreeMode进行封装,TreeView的 ...

  5. WPF 中动态创建、删除控件,注册控件名字,根据名字查找控件

    动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件.FindName("Name") as  控 ...

  6. WPF中增加Month Calendar月历控件

    XAML代码:(这里使用了codeproject.com网站上的一个Dll,你可以在这里下载它:http://www.codeproject.com/cs/miscctrl/MonthCalendar ...

  7. WPF中实现多选ComboBox控件

    在WPF中实现带CheckBox的ComboBox控件,让ComboBox控件可以支持多选. 将ComboBox的ItemsSource属性Binding到一个Book的集合, public clas ...

  8. 在WPF中的Canvas上实现控件的拖动、缩放

    如题,项目中需要实现使用鼠标拖动.缩放一个矩形框,WPF中没有现成的,那就自己造一个轮子:) 造轮子前先看看Windows自带的画图工具中是怎样做的,如下图: 在被拖动的矩形框四周有9个小框,可以从不 ...

  9. WPF中Expander的用法和控件模板详解

    一.Expander的用法 在WPF中,Expander是一个很实用的复合控件,可以很方便的实现下拉菜单和导航栏等功能.先介绍简单的用法,而后分析他的控件模板. <Window.Resource ...

随机推荐

  1. AB PLC简述

    一.  PLC基础概念 PLC:可编程序控制器是一种数字运算的电子系统,专为在工业环境下应用而设计.采用可编程的存储器,用来在内部存储执行逻辑运算.顺序控制.定时.计算和算术运算等操作的指令,并通过数 ...

  2. django-配置404页面

    setting.py文件配置 # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False ALLOW ...

  3. 关于METRIC SPACE中的一些概念对比(sequence and net)

    由于LaTeX 和其他的编辑软件都不太好用,所以采用手写笔记的方式. ——一个想学代几的大二小萌新

  4. LCD驱动程序之层次分析

    1.回顾字符设备驱动程序: 字符设备驱动编写的一般步骤: 1)主设备号 2)构造file_operations结构体体 .open = xxxx .read = xxxxx 3)register_ch ...

  5. CentOS7 下使用 Firewall防火墙系统封禁允许IP和端口的访问 端口转发 IP转发方法

    CENTOS7的防火墙系统默认已经从iptable改成了firewall,使用方法也有所不同,下面是详细介绍 一.管理端口 列出 dmz 级别的被允许的进入端口 # firewall-cmd --zo ...

  6. 13-cmake语法-路径设置

    路径设置: 包括头文件路径.库文件路径.库文件名等 INCLUDE_DIRECTORIES 向工程添加多个特定的头文件搜索路径,路径之间用空格分隔,如果路径包含空格,可以使用双引号将它括起来,默认的行 ...

  7. SVG学习(三)

    _ 阅读目录 一:在SVG中使用样式 二:分组和引用对象 1. 理解 <g> 元素 2. 理解 <use> 元素 3. 理解 <defs> 元素 4. 理解< ...

  8. 【oracle】处理锁表

    查询锁表 select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session swhe ...

  9. hadoop java.io.EOFException: Unexpected end of input stream

    执行hadoop 报错 java.io.EOFException: Unexpected end of input stream at org.apache.hadoop.io.compress.De ...

  10. 【DP】【P5615】 [MtOI2019] 时间跳跃

    Description 给定 \(n\) 条边,第 \(i\) 条边的长度为 \(i\),每条边都有 \(50\%\) 的概率被选择,求如果选出的边能组成一个平面凸多边形,则方案的权值是方案中边的数量 ...