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;
        }


        #endregion


        private 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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值