wpf passwordbox控件 光标移到最后

在学习WPF 的passwordbox控件中发现一个有意思的事情,在使用附属属性来做MVVM模式的双向绑定的时候,在最后测试发现数据更新的时候,输入框中的光标会重置到最前面。

下面是我的代码简化版本,可以参考一下:

XML 复制代码
<PasswordBox 
            local:PasswordBoxHelper.IsEnablePasswordPropertyChangeProperty="True"
            local:PasswordBoxHelper.Pwd="{Binding Password,Mode=TwoWay}"
            />
cs 复制代码
/*
    附属属性: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;

}

这里提供一个解决方案:当输入数据时候输入框中的光标会重置到最前面,我们就将光标手动调整到最后方。

方法如下:

cs 复制代码
/// <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

相关推荐
点心的游戏开发世界17 小时前
Unity C# 脚本学习笔记:命名空间与 using
学习·unity·c#
淡海水19 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
点心的游戏开发世界19 小时前
Unity C# 脚本学习笔记:泛型
学习·unity·c#
公子小六1 天前
基于.NET的Windows窗体编程之WinForms滑块与上下控件
windows·microsoft·c#·.net·winforms
曹牧1 天前
C#:文本文件读取
服务器·前端·c#
2601_967338711 天前
C#上位机开发零基础入门到精通全套视频
开发语言·c#
czhc11400756631 天前
2026-09-03 博客:配置与密码 · 合并代码 · 超时排查
c#
格林威1 天前
C#图像夜间识别率提升:使用OpenCvSharp和Halcon融合DeepSORT实现复杂场景下准确识别
开发语言·人工智能·数码相机·机器学习·计算机视觉·c#·视觉检测
dalong101 天前
WPF:箭头绘制程序
wpf·自定义绘制
曹牧1 天前
C#:线程间操作无效,不是从创建控件线程访问
开发语言·c#