我在c#中创建了一个wpf应用程序,我知道要关闭/打开一个窗口,你必须使用.Close()和.Show()方法,但由于某种原因主屏幕,第一个出现的窗口我启动了该应用程序,不会关闭。
Home window1 = new Home();
window1.Close();
Name window2 = new Name();
window2.Show();
出现Window2,但window1不会关闭。有什么问题。
答案 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>