Текстовое поле WPF / текстовое поле пароля исчезают при клике

Я делаю экран входа для приложения wpf. Я хочу 2 текстовых поля, одно для имени пользователя и пароля.

Для имени пользователя я использовал текстовое поле и добавил к нему текст ("Имя пользователя"), который исчезает, когда пользователь нажимает на него, чтобы ввести свое имя пользователя. Я сделал это с кодом ниже.

Я не могу воспроизвести это для пароля. Я не верю, что смогу использовать текстовое поле, так как не смогу замаскировать пользовательский ввод в * или что-то еще, и я не могу найти способ жестко закодировать "пароль" в поле, чтобы оно исчезло когда пользователь нажимает.

Как я могу это сделать? Я знаю, что это возможно, так как многие сайты имеют эту функцию, но я не могу понять это после долгого поиска в Google!

Я должен подчеркнуть, что я совершенно новичок в программировании, поэтому ответы, нацеленные на новичка, будут высоко оценены!

Спасибо

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

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

Пример имени пользователя здесь

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

Похоже, вам нужно немного настроить свой пароль. Один из способов добиться этого - создать UserControl с паролем и надписью над ним. В GotFocus for box для пароля вы просто устанавливаете видимость текстового блока как Collapsed. И не забудьте установить HitTestVisible=false для текстового блока.

Другие вопросы по тегам