WPF 使用TextBox做密码输入框

WPF 使用TextBox做密码输入框密码输入框需要输入的密码不能显示明文,用其他的特殊字符代替显示。显示效果如下:Xaml部分代码如下:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

密码输入框需要输入的密码不能显示明文,用其他的特殊字符代替显示。
显示效果如下:
在这里插入图片描述

Xaml部分代码如下:

<Window x:Class="TextBoxPwd.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TextBoxPwd"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <TextBox FontFamily="Courier New" x:Name="pwd" FontSize="20" Foreground="Transparent" Text="sdfsddfsfs"/>

        <TextBox FontFamily="Courier New"  FontSize="20"  Text="sdfsddfsfs"/>

    </StackPanel>
</Window>

后台代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace TextBoxPwd
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            pwd.TextDecorations = new TextDecorationCollection(new TextDecoration[] {
                new TextDecoration() {
                     Location= TextDecorationLocation.Strikethrough,
                      Pen= new Pen(Brushes.Black, 10f) {
                          DashCap =  PenLineCap.Round,
                           StartLineCap= PenLineCap.Round,
                            EndLineCap= PenLineCap.Round,
                             DashStyle= new DashStyle(new double[] {0.0,1.2 }, 0.6f)
                      }
                }

            });

        }
    }
}

上面这种方式存在多种问题,直接使用WPF提供的控件也是可以的绑定部分也有方式实现。现在提供一种使用TextBox+Converter来实现的方式。
在这里插入图片描述
converter如下:

 public class PassWordConverter
        :IValueConverter
    {
        private string realWord = "";

        private char replaceChar = '*';

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if(parameter != null)
            {
                string temp=parameter.ToString();
                if(!string.IsNullOrEmpty(temp))
                {
                    replaceChar= temp.First();
                }
            }

            if (value != null)
            {
                realWord = value.ToString();
            }
           

            string replaceWord = "";
            for(int index=0; index < realWord.Length; ++ index)
            {
                replaceWord += replaceChar;
            }

            return replaceWord;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string backValue = "";
            if(value != null)
            {
                string strValue = value.ToString();
                for(int index =0; index < strValue.Length;++index)
                {
                    if(strValue.ElementAt(index)== replaceChar)
                    {
                        backValue += realWord.ElementAt(index);
                    }
                    else
                    {
                        backValue += strValue.ElementAt(index);
                    }
                }
            }
            return backValue;
        }

    }

使用:

<Window x:Class="WpfApp2.Window4"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="Window4" Height="450" Width="800">
    <Window.Resources>
        <local:PassWordConverter x:Key="passWordConverter"/>
    </Window.Resources>
    <StackPanel Margin="30">
        <TextBox 
            FontSize="18"
            Height="30"
            Foreground="Red"            
            Text="{Binding Word,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource passWordConverter}}"/>
        <TextBox 
            FontSize="18"
            Height="30"
            Foreground="Red"            
            Text="{Binding Word,UpdateSourceTrigger=PropertyChanged}"/>
    </StackPanel>
</Window>


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161453.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月25日 下午12:36
下一篇 2022年7月25日 下午12:46


相关推荐

  • STM32F407 + LAN8720A + LWIP 实现TCP服务器

    STM32F407 + LAN8720A + LWIP 实现TCP服务器STM32F407+LAN8720A+LWIP实现TCP客户端环境说明:开发板:某宝买的,STM32F407IGSTM32CUBEMX5.6HALLibVersion1.25(一)配置时钟(二)配置调试串口(三)配置以太网ETH(1)基础配置顺序依次说明:LAN8720A使用的是RMII接口进行配置寄存器自动重连使能MAC地址LAN8720A的物理地址(类似IIC的从设备地址),可配置为0或者1,由LAN8720A的RXER/PHYAD0引脚控制

    2022年6月17日
    54
  • 安装 Northwind 示例数据库

    安装 Northwind 示例数据库安装 Northwind 示例数据库 nbsp nbsp nbsp nbsp 在 mssql2000 中 要完成 LightSwitch 导览课程 必须下载并安装 Northwind 示例数据库 nbsp nbsp nbsp 安装 Northwind 数据库从 Microsoft 下载中心下载 nbsp Northwindand SQLServer200 的 No

    2026年3月17日
    2
  • 代码保护(一) 几款加壳工具[通俗易懂]

    代码保护(一) 几款加壳工具[通俗易懂]DRMsoftEncryptEXE(有激活成功教程版)加密模式:非绑定模式—-加密后的文件不绑定用户电脑,但用户需要一个开启密码才可以打开绑定模式—-一机一码授权,加密后的文件不同用户电脑需要不同的开启密码无密码模式—-加密后的文件无需要开启密码即可运行,仅对原始文件做加密保护一码通模式—-采用相同秘钥和产品编号加密的不同文件,在同台电脑上只需认证一次特点:可以设置加密…

    2022年6月27日
    73
  • aws 将俄勒冈的ami 镜像复制到东京地区

    aws 将俄勒冈的ami 镜像复制到东京地区

    2022年2月18日
    57
  • Laravel5.3使用学习笔记—中间件

    Laravel5.3使用学习笔记—中间件

    2021年10月22日
    53
  • 又被鹅厂问懵逼了:TCP 四次挥手收到乱序的 FIN 包会如何处理?

    又被鹅厂问懵逼了:TCP 四次挥手收到乱序的 FIN 包会如何处理?大家好,我是小林。收到个读者的问题,他在面试鹅厂的时候,被搞懵了,因为面试官问了他这么一个网络问题:不得不说,鹅厂真的很喜欢问网络问题,而且爱问异常情况下的网络问题,之前也有篇另外一个读者面试鹅厂的网络问题:「被鹅厂面怕了!」。不过这道鹅厂的网络题可能是提问的读者表述有问题,因为如果FIN报文比数据包先抵达客户端,此时FIN报文其实是一个乱序的报文,此时客户端的TCP连接并不会从FIN_WAIT_2状态转换到TIME_WAIT状态。因此,我们要关注到点是看「在FIN_WAI

    2022年5月8日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号