如何关闭主窗口

时间:2009-07-21 15:34:30

标签: c# wpf window

我在c#中创建了一个wpf应用程序,我知道要关闭/打开一个窗口,你必须使用.Close()和.Show()方法,但由于某种原因主屏幕,第一个出现的窗口我启动了该应用程序,不会关闭。

        Home window1 = new Home();
        window1.Close();
        Name window2 = new Name();
        window2.Show();

出现Window2,但window1不会关闭。有什么问题。

4 个答案:

答案 0 :(得分:1)

大概是因为如果你关闭窗口,你将关闭应用程序。

如果您只想隐藏主窗口,请使用window.Hide()方法。

来自Window.Close的帮助:

  

可以使用以下方法之一关闭窗口   几个,众所周知的,系统提供的   机制位于其标题栏中,   包括:

     

ALT + F4。

     

系统菜单| 关闭即可。

     

关闭按钮。

     

也可以使用一个窗口关闭窗口   几个众所周知的机制   在客户区内   由开发人员提供,包括:

     

档案 |主窗口上的退出

     

档案 |关于关闭关闭按钮   儿童之窗。

<强>更新

TormodFjeldskår对他的回答有一个很好的观点。我假设代码是作为示例给出的,而不是实际使用的代码。

答案 1 :(得分:1)

您展示window1的代码在哪里?如果您在代码中的其他位置显示主窗口,则需要使用该引用以关闭它。创建新的Home对象并调用其Close方法不会关闭使用其他Home对象显示的窗口。

答案 2 :(得分:1)

这是WPF中的一个错误。如果尚未发生SourceInitialized事件,Window.Close将无提示失败。对Window.Close的后续调用也将失败。

https://connect.microsoft.com/WPF/feedback/ViewFeedback.aspx?FeedbackID=299100

要获得解决方法,请将其添加到您的窗口:

protected override void OnSourceInitialized(EventArgs e)
{
    base.OnSourceInitialized(e);

    // check if we've already been closed
    if (m_bClosed)
    {
        // close the window now
        Close();
    }
}

protected override void OnClosing(CancelEventArgs e)
{
    base.OnClosing(e);

    // make sure close wasn't cancelled
    if (!e.Cancel)
    {
        // mark window as closed
        m_bClosed = true;

        // if our source isn't initialized yet, Close won't actually work,
        // so we cancel this close and rely on SourceInitialized to close
        // the window
        if (new WindowInteropHelper(this).Handle == IntPtr.Zero)
            e.Cancel = true;
    }
}

bool m_bClosed;

答案 3 :(得分:0)

或者你可以让Window2成为主窗口(你可以在StartUpUri属性中的app.xaml中更改它)并且要么让Window2显示并关闭Window1,要么根本不显示Window1。

<Application x:Class="Invitrogen.TheGadget.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="Window2.xaml">
</Application>