在wpf window.show()和window.close()上澄清,以及它们如何与多个窗口一起使用



我遇到的问题和看起来许多人过去遇到过的问题处理WPF是我要隐藏或关闭MainWindow打开新窗口时的应用。我要这样做的原因是因为制作标签对我来说并不整洁,尤其是我如何设计UI。我尝试使用newwindow.show()和oldwindow.close(),但是当程序运行时,旧的窗口仍应在应该关闭时显示。我还尝试过将其制作,因此当newwindow被称为时,旧的窗户被隐藏了。它们都产生完全相同的结果。据我了解,您实际上不能关闭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;
        }
    }

您实际上不能关闭Mainwindow,因为它是需要的 继续运行的程序

此断言是错误的,尽管这是默认行为,但您可以将Application类的ShutdownMode设置为OnLastWindowCloseOnExplicitShutdown。然后关闭主窗口将无法结束您的应用程序。

另外,您可能需要使用Hide方法而不是Close,因为您似乎要以后还原主窗口。


关于您发布的代码,我不太了解您在做什么。您正在创建一个新的MainWindow并在此之后关闭,而不是尝试关闭已经存在的MainWindow。

您似乎正在使用页面 - 您确定您真的想创建 new windows,而不仅仅是在 same same window上的不同页面之间导航?

无论如何,这是您的方法的可能实现:

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;
}

相关内容

  • 没有找到相关文章

最新更新