C# 为什么我能';t调用&x27;新建窗口().ShowDialog()和#x27;应用程序启动时2次?
以下是XAML代码:C# 为什么我能';t调用&x27;新建窗口().ShowDialog()和#x27;应用程序启动时2次?,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,以下是XAML代码: <Application x:Class="WpfApplication2.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Startup="Application_Startup" /&g
<Application x:Class="WpfApplication2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup" />
窗口仅显示一次,然后应用程序退出。为什么
更新:我知道windows应该会出现。但在我关闭第一个窗口后,第二个窗口根本不显示
private void Application_Startup(object sender, StartupEventArgs e)
{
var w1 = new Window();
var w2 = new Window();
w1.ShowDialog();
w2.ShowDialog();
}
粘贴表单注释:
我认为,当您关闭第一个窗口时,应用程序会检查是否还有其他窗口,但找不到任何窗口(因此应用程序正在关闭),因为第二个窗口尚未创建,除非关闭,否则ShowDialog将不允许您创建同一表单 这是模态和非模态形式之间的区别 我认为WPF也是同样的原因 你可以看到↓ 更新: 根据Stecya的答案进行测试,测试结果很好
protected override void OnStartup(StartupEventArgs e)
{
var w1 = new Window();
var w2 = new Window();
w1.ShowDialog();
w2.ShowDialog();
}
我说的对吗?这将连续显示两个窗口,而不是同时显示?当window1关闭时,window2将自动打开,因为调用是ShowDialog(),它将打开窗口,然后将焦点设置为该窗口,并且在window1关闭之前不会打开另一个窗口?您可以使用for循环来执行此操作。但是,我不知道为什么不能直接打电话
for (int i = 0; i < 2; i++)
{
new Window().ShowDialog();
}
for(int i=0;i<2;i++)
{
新建窗口().ShowDialog();
}
您可能在用于关闭窗口1的代码中结束整个应用程序。如果您正在使用类似于Environment.Exit(0)的东西代码>这可能就是问题所在。如果您能重现这种情况,请留下评论这就是所有代码。正如您所看到的,没有Environment.Exit()
调用。窗口是System.Windows.Window
classIt不是关于模态和非模态的。我更新了我的问题以澄清这一点。我认为当您关闭第一个窗口时,应用程序会检查是否有其他窗口,但没有找到任何窗口(因此应用程序正在关闭),因为第二个窗口尚未创建。您的答案不是答案,但此注释是正确的。如果ShutdownMode
更改为OnExplicitShutdown
,则原始代码可以工作。那么为什么要将答案作为注释发布?把它作为答案贴出来,我会记下来的。
for (int i = 0; i < 2; i++)
{
new Window().ShowDialog();
}