PasswordPromptWindow.xaml.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. ShowPasswordIcon.Visibility = Visibility.Collapsed;
  49. HidePasswordIcon.Visibility = Visibility.Visible;
  50. TogglePasswordVisibilityButton.ToolTip = "隐藏密码";
  51. PasswordTextBox.Focus();
  52. PasswordTextBox.CaretIndex = PasswordTextBox.Text.Length;
  53. return;
  54. }
  55. PasswordBox.Password = PasswordTextBox.Text;
  56. PasswordBox.Visibility = Visibility.Visible;
  57. PasswordTextBox.Visibility = Visibility.Collapsed;
  58. ShowPasswordIcon.Visibility = Visibility.Visible;
  59. HidePasswordIcon.Visibility = Visibility.Collapsed;
  60. TogglePasswordVisibilityButton.ToolTip = "查看密码";
  61. PasswordBox.Focus();
  62. }
  63. private void PasswordTextBox_OnTextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
  64. {
  65. if (_isSyncingPasswordText)
  66. {
  67. return;
  68. }
  69. _isSyncingPasswordText = true;
  70. PasswordBox.Password = PasswordTextBox.Text;
  71. _isSyncingPasswordText = false;
  72. }
  73. private void FocusPasswordInput()
  74. {
  75. if (_isPasswordVisible)
  76. {
  77. PasswordTextBox.Focus();
  78. return;
  79. }
  80. PasswordBox.Focus();
  81. }
  82. }