WPF多个对话框,可见性属性问题



我有一个登录表单,它启动了一个选择器窗口的对话框

当交换窗口时,它看起来像这样:

//LoginWindow to LecturerClient
this.Visibility = Visibility.Collapsed;
LecturerWindow lecturerClient = new LecturerWindow(self);
lecturerClient.Owner = this;
lecturerClient.ShowDialog();
this.Visibility = Visibility.Visible; // so when the lecturerClient dialogs exits - the login form will be visible

我的讲师窗口也打开了另一个对话框:

//LecturerClient To Session
Dispatcher.Invoke(() =>
{
Visibility = Visibility.Collapsed;
Session newSession = new Session(mySelf, Courses.Find(item => item.courseId == courses[1].ToString()));
newSession.Owner = this;
newSession.ShowDialog();
Visibility = Visibility.Visible;
});

当我的会话对话框关闭时,问题开始了,突然我的LoginDow和我的讲师窗口都变为可见,这就像我的Login Dow认为会话关闭是讲师窗口关闭

提前谢谢!

我相信你已经解决了你的问题,但这里有一个适合未来读者的解决方案:

与其通过设置window.Visibility = Visibility.Collapsed;来隐藏应用程序中的窗口,我只需打开新窗口,然后关闭旧窗口:

// in LoginWindow.xaml.cs
private void SubmitButton_OnClick(object sender, RoutedEventArgs e)
{
// create a new window to show
LecturerWindow newWindow = new LecturerWindow()
{
Title                 = "Lecturer Window",
WindowStartupLocation = WindowStartupLocation.CenterScreen
};
// change the app main window to use the new window
Application.Current.MainWindow = newWindow;
newWindow.Show();
// close the LoginWindow
this.Close();
}

请注意,如果在打开新窗口之前关闭当前窗口,如果没有其他窗口打开,应用程序将启动关闭。此行为由Application.ShutdownMode属性决定。通过在关闭当前窗口之前打开新窗口,我们可以避免这种情况(如上图所示(。

同样的操作也可以在讲师客户端中进行,以打开会话窗口。

关闭LecturerClient窗口时,您可以通过订阅Closing事件再次打开新的LoginForm窗口:

// in LecturerWindow.xaml.cs
public LecturerWindow()
{
InitializeComponent();
Closing += OnClosing;
}
// Open the login form again when this window is closing
private void OnClosing(object sender, CancelEventArgs e)
{
// create a new window to show
LoginWindow newMainWindow = new LoginWindow()
{
Title                 = "Login form window",
WindowStartupLocation = WindowStartupLocation.CenterScreen
};
// change the app main window to use the new window
Application.Current.MainWindow = newMainWindow;
newMainWindow.Show();
// This window is already closing, so we don't need to call Close()
}

最新更新