我有一个WPF应用程序,我想用密码保护我的中央tabcontrol中的tabitem。
所以我在MainWindow.xaml.cs中使用了tabControl_SelectionChanged事件,如果所选的tabitem有一个tag =“password”,我会调用一个模态密码对话框。
private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
TabItem selectedItem = (TabItem)e.AddedItems[0];
if (selectedItem.Tag != null && selectedItem.Tag.Equals("Password"))
{
PasswordView pw = new PasswordView();
pw.Owner = this;
bool? result = pw.ShowDialog();
if (result.HasValue && !result.Value)
{
tabControl.SelectedItem = tabControl.Items[0];
}
}
}
这里是密码对话框的属性:
Topmost="True"
Title="PasswordView"
WindowStyle="None"
ResizeMode="NoResize"
WindowState="Maximized"
WindowStartupLocation="CenterScreen"
ShowInTaskbar="False"
MainWindow的属性:
WindowState="Maximized"
WindowStyle="None"
ResizeMode="NoResize"
视图显示文本框和按钮。在按钮单击时,我正在检查viewmodel中的密码并将MVVMLight消息发送到密码视图,因此视图可以设置DialogResult并自行关闭它。 (我也用DialogCloser和DialogResult数据绑定完成了,我得到了相同的结果)
在viewmodel中:
if (password.Equals(Properties.Settings.Default.ServicePassword))
{
PasswordOk = true;
}
else
{
PasswordOk = false;
}
password = "";
Messenger.Default.Send<NotificationMessage>(
new NotificationMessage(this, "CloseWindowsBoundToMe")
);
和视图:
Messenger.Default.Register<NotificationMessage>(this, (nm) => CloseWindow(nm));
private void CloseWindow(NotificationMessage nm)
{
if (nm.Notification == "CloseWindowsBoundToMe")
{
if (nm.Sender == this.DataContext)
{
PasswordViewModel pvm = ((PasswordViewModel)DataContext);
DialogResult = pvm.PasswordOk;
}
}
}
回到MainWindow.xaml.cs我正在检查DialogResult。如果为true(密码正常)则不执行任何操作,如果为false,则将tabcontrol的SelectedItem设置为主选项卡。
TabItem selectedItem = (TabItem)e.AddedItems[0];
if (selectedItem.Tag != null && selectedItem.Tag.Equals("Password"))
{
PasswordView pw = new PasswordView();
pw.Owner = this;
bool? result = pw.ShowDialog();
if (result.HasValue && !result.Value)
{
tabControl.SelectedItem = tabControl.Items[0];
}
}
基本上一切正常,但是如果我想在保护的tabitem中更改3次以上输入错误的密码,则模态密码视图不会显示在前台。只有Alt + Tab将对话框带到前台....
该结果是可再现的 - &gt;尝试3次是好的,然后下一次尝试密码对话框显示在后台。
还有另一个受密码保护的标签,如果我在密码对话框卡在后台后点击此标签,则会显示两个密码对话框...
所以问题是:为什么模态密码对话框不能正常工作?