wpf passwordbox控件 光标移到最后
在学习WPF 的passwordbox控件中发现一个有意思的事情,在使用附属属性来做MVVM模式的双向绑定的时候,在最后测试发现数据更新的时候,输入框中的光标会重置到最前面。
下面是我的代码简化版本,可以参考一下:
<PasswordBox local:PasswordBoxHelper.IsEnablePasswordPropertyChangeProperty="True"local:PasswordBoxHelper.Pwd="{Binding Password,Mode=TwoWay}"/>
/*附属属性:Pwd*/
public static string GetPwd(DependencyObject obj)
{return (string)obj.GetValue(PwdProperty);
}public static void SetPwd(DependencyObject obj, string value)
{obj.SetValue(PwdProperty, value);
}// Using a DependencyProperty as the backing store for Pwd. This enables animation, styling, binding, etc...
public static readonly DependencyProperty PwdProperty =DependencyProperty.RegisterAttached("Pwd", typeof(string), typeof(PasswordBoxHelper), new PropertyMetadata(String.Empty, OnPwdPropertyChanged));private static void OnPwdPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{PasswordBox? pwdBox = d as PasswordBox;if (pwdBox == null) return;pwdBox.Password = (string)e.NewValue;}
这里提供一个解决方案:当输入数据时候输入框中的光标会重置到最前面,我们就将光标手动调整到最后方。
方法如下:
/// <summary>
/// 重置光标位置为最后一位
/// </summary>
/// <param name="passwordBox"></param>
/// <param name="start">指定光标位置</param>
/// <param name="length">指定选中内容长度</param>
private static void SetSelection(PasswordBox passwordBox, int start, int length)
{passwordBox.GetType().GetMethod("Select", BindingFlags.Instance | BindingFlags.NonPublic)?.Invoke(passwordBox, new object[] { start, length });
}
方法使用参考:
内容参考:https://www.cnblogs.com/dyfisgod/p/9081767.html