大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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>
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161453.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...