Просмотр исходного кода

feat(ui): 密码弹窗支持切换明文查看

在密码输入框右侧添加眼睛图标按钮,支持用户点击切换密码的明文/密文显示状态,提升输入体验。
yangkaixiang 1 месяц назад
Родитель
Сommit
78453484ff

+ 1 - 1
windows/NetTool.Client/NetTool.Client.csproj

@@ -8,7 +8,7 @@
     <UseWPF>true</UseWPF>
     <AssemblyName>NetTool.Client</AssemblyName>
     <RootNamespace>NetTool.Client</RootNamespace>
-    <InformationalVersion>2026.05.15.1809</InformationalVersion>
+    <InformationalVersion>2026.05.15.1818</InformationalVersion>
   </PropertyGroup>
 
 </Project>

+ 29 - 5
windows/NetTool.Client/PasswordPromptWindow.xaml

@@ -17,11 +17,35 @@
                    Foreground="#111827"
                    TextWrapping="Wrap" />
 
-        <PasswordBox x:Name="PasswordBox"
-                      Grid.Row="1"
-                      Margin="0,16,0,0"
-                      MinHeight="36"
-                      VerticalContentAlignment="Center" />
+        <Grid Grid.Row="1"
+              Margin="0,16,0,0">
+            <PasswordBox x:Name="PasswordBox"
+                          MinHeight="36"
+                          Padding="0,0,36,0"
+                          VerticalContentAlignment="Center" />
+            <TextBox x:Name="PasswordTextBox"
+                     MinHeight="36"
+                     Padding="0,0,36,0"
+                     VerticalContentAlignment="Center"
+                     TextChanged="PasswordTextBox_OnTextChanged"
+                     Visibility="Collapsed" />
+            <Button x:Name="TogglePasswordVisibilityButton"
+                    Width="30"
+                    Height="30"
+                    Margin="0,3,3,3"
+                    Padding="0"
+                    HorizontalAlignment="Right"
+                    VerticalAlignment="Center"
+                    Background="Transparent"
+                    BorderThickness="0"
+                    Click="TogglePasswordVisibilityButton_OnClick"
+                    Content="&#xED1A;"
+                    Cursor="Hand"
+                    FontFamily="Segoe MDL2 Assets"
+                    FontSize="14"
+                    Foreground="#6B7280"
+                    ToolTip="查看密码" />
+        </Grid>
 
         <Button x:Name="ClearPasswordButton"
                 Grid.Row="2"

+ 51 - 0
windows/NetTool.Client/PasswordPromptWindow.xaml.cs

@@ -4,11 +4,15 @@ namespace NetTool.Client;
 
 public partial class PasswordPromptWindow : Window
 {
+    private bool _isPasswordVisible;
+    private bool _isSyncingPasswordText;
+
     public PasswordPromptWindow(string deviceLabel, string savedPassword)
     {
         InitializeComponent();
         PromptTextBlock.Text = $"请输入设备 {deviceLabel} 的管理密码。";
         PasswordBox.Password = savedPassword;
+        PasswordTextBox.Text = savedPassword;
         ClearPasswordButton.Visibility = string.IsNullOrWhiteSpace(savedPassword) ? Visibility.Collapsed : Visibility.Visible;
         Loaded += (_, _) => PasswordBox.Focus();
     }
@@ -38,7 +42,54 @@ public partial class PasswordPromptWindow : Window
     {
         ClearSavedPasswordRequested = true;
         PasswordBox.Clear();
+        PasswordTextBox.Clear();
         ClearPasswordButton.Visibility = Visibility.Collapsed;
+        FocusPasswordInput();
+    }
+
+    private void TogglePasswordVisibilityButton_OnClick(object sender, RoutedEventArgs e)
+    {
+        _isPasswordVisible = !_isPasswordVisible;
+        if (_isPasswordVisible)
+        {
+            PasswordTextBox.Text = PasswordBox.Password;
+            PasswordTextBox.Visibility = Visibility.Visible;
+            PasswordBox.Visibility = Visibility.Collapsed;
+            TogglePasswordVisibilityButton.Content = "\ue7b3";
+            TogglePasswordVisibilityButton.ToolTip = "隐藏密码";
+            PasswordTextBox.Focus();
+            PasswordTextBox.CaretIndex = PasswordTextBox.Text.Length;
+            return;
+        }
+
+        PasswordBox.Password = PasswordTextBox.Text;
+        PasswordBox.Visibility = Visibility.Visible;
+        PasswordTextBox.Visibility = Visibility.Collapsed;
+        TogglePasswordVisibilityButton.Content = "\uED1A";
+        TogglePasswordVisibilityButton.ToolTip = "查看密码";
+        PasswordBox.Focus();
+    }
+
+    private void PasswordTextBox_OnTextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
+    {
+        if (_isSyncingPasswordText)
+        {
+            return;
+        }
+
+        _isSyncingPasswordText = true;
+        PasswordBox.Password = PasswordTextBox.Text;
+        _isSyncingPasswordText = false;
+    }
+
+    private void FocusPasswordInput()
+    {
+        if (_isPasswordVisible)
+        {
+            PasswordTextBox.Focus();
+            return;
+        }
+
         PasswordBox.Focus();
     }
 }