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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python递归详解

    Python递归详解递归的依据在数学中,其实就是数学中的数学归纳法。一、数学归纳法什么是数学归纳法?最简单和常见的数学归纳法是证明当n等于任意一个自然数时某命题成立。证明分下面两步:证明当n=1时命题成立。假设n=m时命题成立,那么可以推导出在n=m+1时命题也成立。(m代表任意自然数)这种方法的原理在于:首先证明在某个起点值时命题成立,然后证明从一个值到下一个值的过程有效。当这两点都已经证明…

    2022年6月17日
    41
  • KEIL MDK生成bin文件的两种方法[通俗易懂]

    KEIL MDK生成bin文件的两种方法[通俗易懂]KEILMDK生成bin文件的两种方法:生成bin文件的设置路径:Keil->OptionforTarget->User->AfterBuild/Rebuild->Run#1(勾上)->输入bin文件的生成方式bin文件的生成都是通过fromelf.exe来实现的,fromelf.exe一般在Keil的安装路径下:例:D:\Ke…

    2022年10月20日
    4
  • Maven中央仓库地址_中央储备粮仓

    Maven中央仓库地址_中央储备粮仓1、私服nexus工具使用http://www.sonatype.org/nexus/2、推荐http://mvnrepository.com/3、默认地址http://repo1.maven.org/maven24、阿里云(强力推荐)http://maven.aliyun.com/nexus/content/groups/public/5、私服nexus工具使用http://repo2.maven.org/maven2/6、UKhttp://uk.maven.o

    2025年8月2日
    3
  • 初识ABP vNext(9):ABP模块化开发-文件管理

    初识ABP vNext(9):ABP模块化开发-文件管理

    2020年11月20日
    217
  • Java main方法

    Java main方法publicstaticvoidmain(String[]args){}或者 publicstaticvoidmain(Stringargs[]){}main方法是我们学习Java语言学习的第一个方法,也是每个java使用者最熟悉的方法,每个Java应用程序都必须有且仅有一个main方法。在eclipse里可以使用输入main,在按住Alt+/的方式快速创建main方法

    2022年6月1日
    32
  • 视频讲解数学题目的软件哪个好_leetcode简单题

    视频讲解数学题目的软件哪个好_leetcode简单题终于将LeetCode的大部分题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~博主还制作了一款网页版APP,方便大家进行查阅,

    2022年8月6日
    6

发表回复

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

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