0

我正在为 wpf 应用程序制作登录屏幕。我想要 2 个文本框,一个用于用户名和密码。

对于用户名,我使用了一个文本框并向其中添加了文本(“用户名”),当用户单击它输入他们的用户名时,该文本会消失。我用下面的代码完成了它。

我似乎无法复制此密码。我不相信我将能够使用文本框,因为我无法将用户输入伪装成 * 或其他内容,而且我无法找到将“密码”硬编码到框中以使其消失的方法当用户点击时。

我怎样才能做到这一点?我知道这是可能的,因为很多网站都有这个功能,但是在谷歌上搜索了很长时间后我无法弄清楚!

我应该强调我对编程完全陌生,因此非常感谢针对完全新手的答案!

谢谢

xaml: GotFocus="UserNameTextbox_OnGotFocus" Foreground="#FFA19DA1"/>

private void UserNameTextbox_OnGotFocus(object sender, RoutedEventArgs e)
    {
        UserNameTextbox.Text = "";
    }

此处为用户名示例

4

2 回答 2

2

试试这个技术:

XAML:

<Window x:Class="WpfApplication16.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:WpfApplication16"
        mc:Ignorable="d"
        Title="MainWindow" Height="100" Width="342.111" Background="DarkBlue">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBlock Text="User Name:" HorizontalAlignment="Right" Foreground="White" />
        <TextBox Name="txtUserName" Grid.Column="1" TextChanged="txtUserName_TextChanged" />
        <TextBlock Name="tbUsername" Text="User Name" Foreground="Gray" IsHitTestVisible="False" Margin="4,0" VerticalAlignment="Center" Grid.Column="1" />    

        <TextBlock  Grid.Row="1" Text="Password:" Foreground="White" HorizontalAlignment="Right" />       
        <PasswordBox Name="pwbPassword" Grid.Row="1" Grid.Column="1" PasswordChanged="pwbPassword_PasswordChanged" />
        <TextBlock Name="tbPassword" Grid.Row="1" Grid.Column="1" Foreground="Gray" Margin="4,0" VerticalAlignment="Center" Text="Password" IsHitTestVisible="False" />
    </Grid>
</Window>

代码背后:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void txtUserName_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (txtUserName.Text.Length > 0)
            tbUsername.Visibility = Visibility.Collapsed;
        else
            tbUsername.Visibility = Visibility.Visible;
    }

    private void pwbPassword_PasswordChanged(object sender, RoutedEventArgs e)
    {
        if (pwbPassword.Password.Length > 0)
            tbPassword.Visibility = Visibility.Collapsed;
        else
            tbPassword.Visibility = Visibility.Visible;
    }
}
于 2016-02-09T22:03:45.860 回答
0

看起来您需要稍微自定义密码框。实现它的一种方法是创建带有密码框和文本块的 UserControl。在密码框的 GotFocus 上,您只需将文本块的可见性设置为折叠。并且不要伪造为文本块设置 HitTestVisible=false。

于 2016-02-08T13:46:38.403 回答