PasswordPromptWindow.xaml.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System.Windows;
  2. namespace NetTool.Client;
  3. public partial class PasswordPromptWindow : Window
  4. {
  5. private bool _isPasswordVisible;
  6. private bool _isSyncingPasswordText;
  7. public PasswordPromptWindow(string deviceLabel, string savedPassword)
  8. {
  9. InitializeComponent();
  10. PromptTextBlock.Text = $"请输入设备 {deviceLabel} 的管理密码。";
  11. PasswordBox.Password = savedPassword;
  12. PasswordTextBox.Text = savedPassword;
  13. ClearPasswordButton.Visibility = string.IsNullOrWhiteSpace(savedPassword) ? Visibility.Collapsed : Visibility.Visible;
  14. Loaded += (_, _) => PasswordBox.Focus();
  15. }
  16. public string Password => PasswordBox.Password;
  17. public bool ClearSavedPasswordRequested { get; private set; }
  18. private void OkButton_OnClick(object sender, RoutedEventArgs e)
  19. {
  20. if (string.IsNullOrWhiteSpace(PasswordBox.Password))
  21. {
  22. MessageBox.Show(this, "请输入管理密码。", "缺少管理密码", MessageBoxButton.OK, MessageBoxImage.Information);
  23. PasswordBox.Focus();
  24. return;
  25. }
  26. DialogResult = true;
  27. }
  28. private void CancelButton_OnClick(object sender, RoutedEventArgs e)
  29. {
  30. DialogResult = false;
  31. }
  32. private void ClearPasswordButton_OnClick(object sender, RoutedEventArgs e)
  33. {
  34. ClearSavedPasswordRequested = true;
  35. PasswordBox.Clear();
  36. PasswordTextBox.Clear();
  37. ClearPasswordButton.Visibility = Visibility.Collapsed;
  38. FocusPasswordInput();
  39. }
  40. private void TogglePasswordVisibilityButton_OnClick(object sender, RoutedEventArgs e)
  41. {
  42. _isPasswordVisible = !_isPasswordVisible;
  43. if (_isPasswordVisible)
  44. {
  45. PasswordTextBox.Text = PasswordBox.Password;
  46. PasswordTextBox.Visibility = Visibility.Visible;
  47. PasswordBox.Visibility = Visibility.Collapsed;
  48. TogglePasswordVisibilityButton.Content = "\ue7b3";
  49. TogglePasswordVisibilityButton.ToolTip = "隐藏密码";
  50. PasswordTextBox.Focus();
  51. PasswordTextBox.CaretIndex = PasswordTextBox.Text.Length;
  52. return;
  53. }
  54. PasswordBox.Password = PasswordTextBox.Text;
  55. PasswordBox.Visibility = Visibility.Visible;
  56. PasswordTextBox.Visibility = Visibility.Collapsed;
  57. TogglePasswordVisibilityButton.Content = "\uED1A";
  58. TogglePasswordVisibilityButton.ToolTip = "查看密码";
  59. PasswordBox.Focus();
  60. }
  61. private void PasswordTextBox_OnTextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
  62. {
  63. if (_isSyncingPasswordText)
  64. {
  65. return;
  66. }
  67. _isSyncingPasswordText = true;
  68. PasswordBox.Password = PasswordTextBox.Text;
  69. _isSyncingPasswordText = false;
  70. }
  71. private void FocusPasswordInput()
  72. {
  73. if (_isPasswordVisible)
  74. {
  75. PasswordTextBox.Focus();
  76. return;
  77. }
  78. PasswordBox.Focus();
  79. }
  80. }