封装: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 ...
随机推荐
- Semaphore的简介及应用场景
Semaphore是一个计数信号量,常用于限制可以访问某些资源(物理或逻辑的)线程数目. 常用函数: 信号量的构造函数 非公平: public Semaphore(int permits);//per ...
- django2.2(一)
限制请求method 什么是method 1.通常客户端请求服务器获取资源为GET方式 2.客户端提交数据给服务器端数据为POST方式 method限制请求 如果要限制请求,比如客户端只允许用GET方 ...
- centos7安装docker-compose报错解决办法
docker-compose是 docker 容器的一种单机编排服务,docker-compose 是一个管理多个容器的工具,比如可以解决容器之间的依赖关系,当在宿主机启动较多的容器时候,如果都是 ...
- springBoot配置druid监控报错Failed to bind properties under 'spring.datasource.druid' to javax.sql.DataSource
报错信息: Description: Failed to bind properties under 'spring.datasource.druid' to javax.sql.DataSource ...
- HDU 2612 Find a way 题解
Find a way Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Eclipse调用Tomcat出错
错误提示:The server cannot be started because one or more of the ports are invalid. Open the server edit ...
- swagger 配置- ssm
swagger 配置 - ssm swagger 是一个用来看接口的工具,具体效果如下,这里用的是swagger2 1.porm.xml <dependency> <groupId& ...
- ppt演讲者视图不可用的解决办法
1. 关闭ppt 2. 对着桌面右键,选择:nView Desktop Manager 3. 应用程序--增强--去掉“添加Powerpoint幻灯片显示扩展程序(W)”
- 五个goland进行go开发的小技巧
五个goland进行go开发的小技巧 本文译自5 Tips To Speed Up Golang Development With IntelliJ Or Goland 确实很实用. 1. 实现int ...
- 【oracle】定时任务存储过程带参
DECLAREX NUMBER;--随机一个job编号BEGINSYS.DBMS_JOB.SUBMIT( job => X,what => 'SHEVERYDAYJOB(TO_CHAR(S ...