WPF开发登录窗口之——添加密码完善登录窗口

caa947e27faddd998cedebf574ba54fa.png

WPF开发者QQ群: 340500857  | 微信群  目前人数太多,暂不开放

66aa9b6639c9e7ceb4486743a68ea560.png 

01

代码如下

一、添加类在“CustomControl”文件夹中加“PasswordInputBox.xaml”

与文本输入框一样,唯一的区别是将文本框改成密码框:

<UserControl x:Class="LoginWindow.CustomControl.PasswordInputBox"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:LoginWindow.CustomControl"mc:Ignorable="d" d:DesignHeight="40" d:DesignWidth="300"><Grid><!-- 提示文本 --><TextBlock x:Name="Hint" Foreground="#3F000000" FontFamily="NSimSun" FontSize="13" VerticalAlignment="Center" Padding="39,0"/><!-- 图标 --><Image x:Name="ImageIcon" HorizontalAlignment="Left" Width="16" VerticalAlignment="Center" Margin="12,0,0,0"/><!-- 密码框 --><PasswordBox x:Name="PasswordBox01" Style="{StaticResource PasswordBoxStyle}" PasswordChanged="PasswordBox01_PasswordChanged" Padding="36,0"/><!-- 清除文本按钮 --><Button x:Name="Clear" Width="40" Height="40" HorizontalAlignment="Right" Visibility="Hidden" Click="Clear_Click" Focusable="False"><Button.Template><ControlTemplate TargetType="Button"><Image Source="Image/Clear.png" Width="40"/></ControlTemplate></Button.Template></Button></Grid>
</UserControl>

二、修改继承并实现方法:

using System.Windows;
using System.Windows.Media.Imaging;namespace LoginWindow.CustomControl
{public partial class PasswordInputBox : InputBoxBase{public PasswordInputBox(){InitializeComponent();}#region 接口实现protected override void ApplyText(){PasswordBox01.Password = Text;}protected override void ApplyPlaceHolder(){Hint.Text = PlaceHolder;}protected override void ApplyIcon(BitmapImage icon){ImageIcon.Source = icon;}#endregionprivate void PasswordBox01_PasswordChanged(object sender, RoutedEventArgs e){Text = PasswordBox01.Password;// 显示或隐藏“清除按钮”与“占位文本”Clear.Visibility = Text == "" ? Visibility.Hidden : Visibility.Visible;Hint.Visibility = Text == "" ? Visibility.Visible : Visibility.Hidden;}}
}

三、修改“MainWindow.xaml”,在“StackPanel”中添加一个密码输入框:

<!-- 密码输入框 -->
<cc:PasswordInputBox Height="40" PlaceHolder="密码" Icon="Assets/Lock.png" Margin="0,20,0,0"/>

四、产生这样的效果的原因如下:
输入密码时,会调用:

private void PasswordBox01_PasswordChanged(object sender, RoutedEventArgs e)
{Text = PasswordBox01.Password;
}

五、方法中修改“Text”属性导致调用:

protected override void ApplyText()
{PasswordBox01.Password = Text;
}

六、文本框与密码框不同的是:密码框赋值时,光标会定位到起始处。解决方法就是,在赋值前判断一下是否相等:

protected override void ApplyText()
{if (PasswordBox01.Password != Text)PasswordBox01.Password = Text;
}

七、在主窗口中的“StackPanel”中添加一个登录按钮:

<!-- 登录按钮 -->
<Button x:Name="LoginButton" Content="登录" Height="40" Margin="0,20,0,0"/>
<!-- 可点击文本 -->
<Grid Margin="0 20 0 0"><TextBlock FontSize="12"><Hyperlink Foreground="#A1A1A1">忘记密码</Hyperlink></TextBlock><TextBlock FontSize="12" HorizontalAlignment="Right" Margin="0 0 -1 0"><Hyperlink Foreground="#4370F5" Click="SignUp_Click">注册账号</Hyperlink></TextBlock>
</Grid>

八、这种形式的文本默认带下划线,通过在“Hyperlink”中添加属性来移除下划线:

<Hyperlink Foreground="#A1A1A1" TextDecorations="None">忘记密码</Hyperlink>

九、实现关闭按钮功能

private void Window_Loaded(object sender, RoutedEventArgs e)
{// 关闭窗口((Button)GetTemplateChild("CloseButton")).Click += delegate{Application.Current.Shutdown();};
}

037049c4f869295af13cc7958e27169f.png

源码地址如下

github:https://github.com/yanjinhuagood/WPFDevelopers.git

gitee:https://gitee.com/yanjinhua/WPFDevelopers.git

WPF开发者QQ群: 340500857 

blogs: https://www.cnblogs.com/yanjinhua

Github:https://github.com/yanjinhuagood

出处:https://www.cnblogs.com/yanjinhua

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载请著名作者 出处 https://github.com/yanjinhuagood

b9b08709ca7e8c215fab518533caf5df.png

扫一扫关注我们,

b26fec520982de63ffcde361ebed05e1.gif

更多知识早知道!

21ec1d6efcefec680927b56a58bfda74.gif

点击阅读原文可跳转至源代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之PullToRefresh(ListView 、GridView 、WebView)使用详解和总结

PullToRefresh(ListView 、GridView 、WebView) 基本上每个安卓项目里面都有PullToRefresh的使用,然后我到网上去找了相关知识,很多都不全面,不详细,缺东缺西,然后我就到网上博客里面到处找,更具自己项目里面的使用,把PullToRefreshListView PullToRefreshGrid…

bat脚本中获取上级目录_使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件...

使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件 文章来源与博主本人的CSDN博客&#xff0c;博客地址&#xff1a;https://blog.csdn.net/weixin_43558566/article/details/101458567之前写过.bat 脚本用来监控tomcat运行宕机后自动重启的文章&#xf…

史上最低估自己的天才科学家!预言自己的发现无用,没想到影响全世界,可他却在37岁..........

全世界只有3.14 % 的人关注了爆炸吧知识天妒英才真实存在赫兹在证明了电磁波存在后&#xff0c;他对自己的发现做了一个十分不自信的预测&#xff1a;“我认为我发现的无线电波不会有任何实际应用。”当然&#xff0c;也许是他太优秀了&#xff0c;干啥啥都行&#xff0c;所以觉…

阿里分布式中间件Seata从入门到精通

最近在写一本关于阿里巴巴分布式事务中间件 Seata 的电子书&#xff0c;Seata可以说是分布式事务中间件中最完善的了&#xff0c;包括了 AT、TCC、Saga、XA 四种模式&#xff0c;目前 Seata 已经更新到了 1.4.2 版本。这本电子书主要分成两部分&#xff0c;第一部分是入门学习&…

sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础

在刷了上百道sql题后&#xff0c;发现所有的题目都是基于某一个或几个知识点来做考察的&#xff0c;所以理清基础的知识细节&#xff0c;才能在题目考察到任意知识点时&#xff0c;找到解决线索。温故而知新&#xff0c;学习在于总结&#xff0c;于是我再次对已经学习过的mysql…

为什么不能除以0?

全世界只有3.14 % 的人关注了爆炸吧知识说出来你可能不信但这是真的今天学习了除法的表妹跑来问我&#xff1a;为什么不能除以0&#xff1f;就这个问题&#xff0c;我专门请来了高冷的Siri。同样是数字&#xff0c;0为什么就会这么惨呢&#xff1f;小学生小学老师会直接给你来一…

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构方面的知识&#xff0c;看了之后你会发现你原来的想法很可能…

Android之webview与js交互

对于android初学者应该都了解webView这个组件。之前我也是对其进行了一些简单的了解&#xff0c;但是在一个项目中不得不用webview的时候&#xff0c;发现了webview的强大之处&#xff0c;今天就分享一下使用webview的一些经验。 1、首先了解一下webview。 webview介绍的原文如…

java.util.ResourceBundle使用详解

java.util.ResourceBundle使用详解一、认识国际化资源文件这个类提供软件国际化的捷径。通过此类&#xff0c;可以使您所编写的程序可以&#xff1a;轻松地本地化或翻译成不同的语言一次处理多个语言环境以后可以轻松地进行修改&#xff0c;支持更多的语言环境说的简单点&#…

12如何隐藏dock栏_iPhone边框“变色”壁纸,隐藏Dock栏

自从iOS14上线以来&#xff0c;iPhone的玩法真的是花样百出&#xff0c;今天给大家带来一组很有意思的iPhone专用壁纸&#xff0c;不仅拥有色彩边框&#xff0c;还能隐藏主屏界面底部的Dock栏。这组壁纸除了外边框自带颜色以外&#xff0c;锁屏界面的通知栏和底部两个按钮的位置…

微信新功能又来了,这些功能再次打开了我新世界的大门!

全世界只有3.14 % 的人关注了爆炸吧知识微信视频号&#xff0c;是一个人人都可记录和创作的内容平台&#xff0c;也是一个了解他人、了解世界的窗口。在过去一段时间里&#xff0c;视频号可能是微信迭代最多&#xff0c;变化最多&#xff0c;也受到最多关注的功能。内容创作者大…

Processing编译android的apk应用

折腾了3天&#xff0c;总算弄进去了&#xff0c;真麻烦~&#xff01; 成果如下&#xff1a; 转载于:https://www.cnblogs.com/x5115x/archive/2013/04/11/3013593.html

Android之DiskLruCache(缓存工具)

DiskLruCache DiskLruCache是一个十分好用的android缓存工具&#xff0c;我们可以从GitHub上下载其源码&#xff1a;https://github.com/JakeWharton/DiskLruCache DiskLruCache所有的数据都存储在/storage/emulated/0/Android/data/应用包名/cache/XXX文件夹中(你也可以修改&…

内核中根据inode得到文件名_聊聊DOS操作系统中的文件系统FAT12

前面我们更多的集中在Linux系统下文件系统的介绍&#xff0c;是时候介绍一下其它文件系统了。今天我们介绍一下Windows操作系统下的文件系统&#xff0c;也就是FAT文件系统。严格的来说其实是DOS的文件系统。今天我们介绍一下FAT最古老的版本&#xff0c;FAT12文件系统的内容。…

改变世界面貌的十个数学公式

全世界只有3.14 % 的人关注了爆炸吧知识1971年5月15日&#xff0c;尼加拉瓜发行了十张一套题为“改变世界面貌的十个数学公式”邮票&#xff0c;由一些著名数学家选出十个以世界发展极有影响的公式来表彰。这十个公式不但造福人类&#xff0c;而且具有典型的数学美&#xff0c;…

Java开源门户

最近在研究门户&#xff0c;先整理一下开源内容 GateIn&#xff1a; 新的开源门户平台&#xff0c;由RedHat JBoss和eXo平台共同打造。目标是结合强大的企业级Java基础设施和直观友好的用户界面&#xff0c;根据客户的需求&#xff0c;提供最佳的开源门户平台的企业级Java基础设…

.NET 6新特性试用 | 最小Web API

前言如果你使用过其他一些轻量级Web框架&#xff0c;比如Node.JS&#xff0c;你就会知道&#xff0c;创建具有最小依赖项的HTTP API是多么简单&#xff1a;var express require(express) var app express()app.get(/, function (req, res) {res.send(hello My IO!) })app.lis…

Android之SparseArray<E>详解

最近编程时&#xff0c;发现一个针对HashMap<Integer, E>的一个提示&#xff1a; 翻译过来就是&#xff1a;用SparseArray<E>来代替会有更好性能。那我们就来看看源码中SparseArray到底做了哪些事情&#xff1a;一、构造从构造方法我们可以看出&#xff0c;它和一般…

WPF/MVVM 快速开发

http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial 这篇文章醍醐灌顶&#xff0c;入门良药啊&#xff01; Introduction Assuming that you have a decent understanding of C#, getting started in WPF isnt too difficult. I started looking at WP…

钢厂冒的白烟到底有没有污染?东北大学教授的试验结果让你大吃一惊

全世界只有3.14 % 的人关注了爆炸吧知识对于大多数人来讲钢厂的污染首先是来自于冒的气体钢铁企业污染严重的时候烟气有黄烟、黑烟、红烟、褐色烟等和这些烟相比一部分人认为钢厂冒的白烟是水蒸气没有污染另一部分则认为白烟也是污染避之而不及钢厂冒的白烟到底有没有污染呢&am…