using System.Windows; 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(); } public string Password => PasswordBox.Password; public bool ClearSavedPasswordRequested { get; private set; } private void OkButton_OnClick(object sender, RoutedEventArgs e) { if (string.IsNullOrWhiteSpace(PasswordBox.Password)) { MessageBox.Show(this, "请输入管理密码。", "缺少管理密码", MessageBoxButton.OK, MessageBoxImage.Information); PasswordBox.Focus(); return; } DialogResult = true; } private void CancelButton_OnClick(object sender, RoutedEventArgs e) { DialogResult = false; } private void ClearPasswordButton_OnClick(object sender, RoutedEventArgs e) { 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; ShowPasswordIcon.Visibility = Visibility.Collapsed; HidePasswordIcon.Visibility = Visibility.Visible; TogglePasswordVisibilityButton.ToolTip = "隐藏密码"; PasswordTextBox.Focus(); PasswordTextBox.CaretIndex = PasswordTextBox.Text.Length; return; } PasswordBox.Password = PasswordTextBox.Text; PasswordBox.Visibility = Visibility.Visible; PasswordTextBox.Visibility = Visibility.Collapsed; ShowPasswordIcon.Visibility = Visibility.Visible; HidePasswordIcon.Visibility = Visibility.Collapsed; 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(); } }