- <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);
此方法用来设置光标,否则输入后光标位置不正确
原文:https://www.cnblogs.com/lonelyxmas/p/12073411.html