封装:WPF中可以绑定的BindPassWord控件
一、目的:本身自带的PassWord不支持绑定
二、Xaml部分
-
<UserControl x:Class="HeBianGu.General.WpfControlLib.BindPassWordBox"
-
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-
xmlns:local="clr-namespace:HeBianGu.General.WpfControlLib"
-
mc:Ignorable="d"
-
d:DesignHeight="50" d:DesignWidth="300">
-
<Grid>
-
<PasswordBox x:Name="pb_center" PasswordChanged="pb_center_PasswordChanged" />
-
</Grid>
-
</UserControl>
三、代码部分
-
/// <summary> 可以绑定的密码框 </summary>
-
public partial class BindPassWordBox : UserControl
-
{
-
PasswordBox _password = null;
-
-
private void pb_center_PasswordChanged(object sender, RoutedEventArgs e)
-
{
-
this.PassWord = this._password.Password;
-
}
-
-
-
public BindPassWordBox()
-
{
-
InitializeComponent();
-
}
-
-
public string PassWord
-
{
-
get { return (string)GetValue(PassWordProperty); }
-
set { SetValue(PassWordProperty, value); }
-
}
-
-
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
-
public static readonly DependencyProperty PassWordProperty =
-
DependencyProperty.Register("PassWord", typeof(string), typeof(BindPassWordBox), new PropertyMetadata(default(string), (d, e) =>
-
{
-
BindPassWordBox control = d as BindPassWordBox;
-
-
if (control == null) return;
-
-
string config = e.NewValue as string;
-
-
if (control._password == null) return;
-
-
control._password.Password = config;
-
-
SetPasswordBoxSelection(control._password, config.Length, 0);
-
}));
-
-
-
private static void SetPasswordBoxSelection(PasswordBox passwordBox, int start, int length)
-
{
-
var select = passwordBox.GetType().GetMethod("Select",
-
BindingFlags.Instance | BindingFlags.NonPublic);
-
-
select.Invoke(passwordBox, new object[] { start, length });
-
}
-
}
四、原理
封装一层PassWordBox控件,自定义依赖属性,在PassWordBox的Changed事件中赋值依赖属性
SetPasswordBoxSelection(control._password, config.Length, 0);
此方法用来设置光标,否则输入后光标位置不正确
封装:WPF中可以绑定的BindPassWord控件的更多相关文章
- WPF中不规则窗体与WindowsFormsHost控件的兼容问题完美解决方案
首先先得瑟一下,有关WPF中不规则窗体与WindowsFormsHost控件不兼容的问题,网上给出的解决方案不能满足所有的情况,是有特定条件的,比如 WPF中不规则窗体与WebBrowser控件的兼 ...
- WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...
- WPF 中动态创建和删除控件
原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件) //注册控件 2.容器控件.FindName(" ...
- WPF 将数据源绑定到TreeView控件出现界面卡死的情况
首先来谈一下实现将自定义的类TreeMode绑定到TreeView控件上的一个基本的思路,由于每一个节点都要包含很多自定义的一些属性信息,因此我们需要将该类TreeMode进行封装,TreeView的 ...
- WPF 中动态创建、删除控件,注册控件名字,根据名字查找控件
动态创建控件 1.容器控件.RegisterName("Name",要注册的控件) //注册控件 2.容器控件.FindName("Name") as 控 ...
- WPF中增加Month Calendar月历控件
XAML代码:(这里使用了codeproject.com网站上的一个Dll,你可以在这里下载它:http://www.codeproject.com/cs/miscctrl/MonthCalendar ...
- WPF中实现多选ComboBox控件
在WPF中实现带CheckBox的ComboBox控件,让ComboBox控件可以支持多选. 将ComboBox的ItemsSource属性Binding到一个Book的集合, public clas ...
- 在WPF中的Canvas上实现控件的拖动、缩放
如题,项目中需要实现使用鼠标拖动.缩放一个矩形框,WPF中没有现成的,那就自己造一个轮子:) 造轮子前先看看Windows自带的画图工具中是怎样做的,如下图: 在被拖动的矩形框四周有9个小框,可以从不 ...
- WPF中Expander的用法和控件模板详解
一.Expander的用法 在WPF中,Expander是一个很实用的复合控件,可以很方便的实现下拉菜单和导航栏等功能.先介绍简单的用法,而后分析他的控件模板. <Window.Resource ...
随机推荐
- druid + mysql + mybatis 批量更新报错
首先 批量更新报错 sql injection violation, multi-statement not allow 然后看了博客:https://blog.csdn.net/qq_3634595 ...
- python处理excel函数xlrd、xlwt
https://www.jianshu.com/p/f2c9dff344c6 https://www.cnblogs.com/ilovepython/p/11068841.html 行列操作:http ...
- django项目中的ajax分页和条件查询。
1,路由 #主页面路由 re_path('article/article_list/', article.article_list,name='article/article_list/'), #分页 ...
- centos服务器部署flask项目。
已安装的环境nginx,python3,mysql,uwsgi,virtualenv 1,创建虚拟环境 virtualenv -p python3 myblog 2,进入虚拟环境 source myb ...
- python基本数据类型的时间复杂度
1.list 内部实现是数组 2.dict 内部实现是hash函数+哈希桶.一个好的hash函数使到哈希桶中的值只有一个,若多个key hash到了同一个哈希桶中,称之为哈希冲突. 3.set 内部实 ...
- LOJ 3158: 「NOI2019」序列
题目传送门:LOJ #3158. 题意简述: 给定两个长度为 \(n\) 的正整数序列 \(a,b\),要求在每个序列中都选中 \(K\) 个下标,并且要保证同时在两个序列中都被选中的下标至少有 \( ...
- pycharm调试添加命令行参数
UI界面: Run->Edit Configurations->Parames
- learning shell check requires root privileges
[Purpose] Shell script check requires root privileges [Eevironment] Ubuntu 16.04 bas ...
- CPU中断的工作原理,从最底层讲起
前言 中断的概念属于硬件层.虽然我们在进行软件编程时不会直接使用中断,但理解它对我们来说依然重要. 我们在使用线程切换及状态管理.异常处理.硬件与处理器的交互.I/O操作等指令时,中断都在默默的为我们 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定时访问升级(兼容Air202,SIM800)
实现功能概要 单片机定时使用http访问云端的程序版本, 如果版本不一致,然后通过http下载最新的升级文件,实现远程升级STM32. 兼容Air202,SIM800 测试准备工作(默认访问我的服务器 ...