我遇到的问题,看起来很多人过去曾经有过这样的问题 处理WPF是我想隐藏或关闭的MainWindow 新窗口打开时的应用程序。我想这样做的原因是因为为它制作标签看起来并不整齐,特别是我如何设计我的UI。我尝试过使用newWindow.Show()和oldWindow.Close(),但是当程序运行时,oldWindow仍然会在应该关闭时显示。我也尝试过这样做,以便在调用newWindow时隐藏oldWindow。它们都产生完全相同的结果。据我了解,您实际上无法关闭MainWindow,因为程序需要继续运行。所以,我知道我想要隐藏MainWindow的路线,但正如你可以看到我的问题,它没有按预期工作。 任何人都可以解释我做错了什么或指示
我可以选择其他方法吗?
namespace WorkinProgress
{
/// <summary>
/// Interaction logic for EnglishLanguageSelection.xaml
/// </summary>
public partial class EnglishLanguageSelection : Page
{
public EnglishLanguageSelection()
{
InitializeComponent();
loadList();
}
private void loadList()
{
listBox.Items.Add("math");
listBox.Items.Add("science");
listBox.Items.Add("history");
listBox.Items.Add("english");
}
private void listBox_SelectionChanged(object sender,
SelectionChangedEventArgs e)
{
if (listBox.SelectedIndex == 1)
{
MainWindow main = new MainWindow();
ScienceWindow sci = new ScienceWindow();
NavigationService.Navigate(sci);
main.Close();
}
}
}
}
我也尝试将事件处理程序更改为:
private void listBox_SelectionChanged(object sender,
SelectionChangedEventArgs e)
{
if (listBox.SelectedIndex == 1)
{
MainWindow main = new MainWindow();
ScienceWindow sci = new ScienceWindow();
sci.Show();
main.Visibility = System.Windows.Visibility.Hidden;
}
}
答案 0 :(得分:2)
您实际上无法关闭MainWindow,因为它需要它 程序继续运行
这个断言是错误的,虽然这是默认行为,但您可以将Application
类的ShutdownMode
设置为OnLastWindowClose
或OnExplicitShutdown
。然后关闭主窗口不会结束您的应用程序。
此外,您可能希望使用Hide
方法而不是Close
,因为您似乎希望稍后恢复主窗口。
关于您发布的代码,我不太了解您正在做什么。您正在创建新的MainWindow并在之后关闭它,而不是尝试关闭已存在的 MainWindow。
您好像在使用网页 - 您确定要真正创建新窗口,而不是简单地在相同窗口的不同页面之间导航吗?
无论如何,这是一个可行的方法的可能实现:
private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (listBox.SelectedIndex == 1)
{
ScienceWindow sci = new ScienceWindow();
sci.Show();
// Note: Better store the main window in a globally accessible place
// since you want to retrieve it once it is hidden to show it again
var main = Window.GetWindow(this);
main.Hide();
}
}
在App.xaml.cs中:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
ShutdownMode = ShutdownMode.OnLastWindowClose;
}