Я использую ящик паролей, и мне нужно выполнять какую-то операцию каждый раз, когда пароль меняется в пользовательском интерфейсе. Это поле пароля является частью страницы в окне WPF, и когда страница изменяется/выгружается, событие пароля изменено, похоже, запускается с пустым значением пароля. Есть ли способ узнать, что источником этого события является выгрузка страницы, а не смена пользователем пароля в пользовательском интерфейсе?
Изменить -
Добавляем пример кода для воспроизведения случая. Существует MainWindow, который содержит элемент Frame для рендеринга страниц. Есть 2 примера страниц Page1.xaml и Page2.xaml. Страница 1 имеет поле пароля и текстовое поле, при изменении его значений текст в главном окне изменяется и отображает новые значения. При изменении страницы также запускается событие смены пароля со значением «», но событие textchanged не запускается. Могу ли я предотвратить запуск события pwdChanged здесь?
public partial class MainWindow : Window
{
public Label pwdLabel, txtboxLabel;
private bool page1 = true;
public MainWindow()
{
InitializeComponent();
pwdLabel = PasswordTextLabel;
txtboxLabel = TextboxLabel;
Class1.Instance.mainWin = this;
PasswordTextLabel.Content = "Pwd not changed yet";
TextboxLabel.Content = "Textbox text not changed yet";
PageFrame.Source = new Uri("Page1.xaml", UriKind.Relative);
PageChangeButton.Click += pageChange;
}
private void pageChange(object s, EventArgs e)
{
if(page1)
PageFrame.Source = new Uri("Page2.xaml", UriKind.Relative);
else
PageFrame.Source = new Uri("Page1.xaml", UriKind.Relative);
page1 = !page1;
}
}
This is page 1
Password box -
Text box -
public partial class Page1 : Page
{
public Page1()
{
InitializeComponent();
SamplePwdBox.PasswordChanged += pwdChanged;
SampleTxtBox.TextChanged += txtChanged;
}
private void pwdChanged(object s,EventArgs e)
{
Class1.Instance.mainWin.pwdLabel.Content = "pwd Changed to " + (s as PasswordBox)?.Password;
}
private void txtChanged(object s, EventArgs e)
{
Class1.Instance.mainWin.txtboxLabel.Content = "text Changed to " + (s as TextBox)?.Text;
}
}
This is page 2
Nothing to show here
Подробнее здесь: https://stackoverflow.com/questions/781 ... asswordbox