当我在WPF中对ShowDialog进行两次调用时,第一个窗口正常打开,关闭后第二个窗口不会出现。
<Application
x:Class="Test.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="App_OnStartup">
</Application>
private void App_OnStartup(object sender, StartupEventArgs e)
{
var windowA = new WindowA();
windowA.ShowDialog();
var windowB = new WindowB();
windowB.ShowDialog();
}
窗口A:
<Window x:Class="Test.WindowA"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WindowA" Height="129.452" Width="313.356">
<Grid>
<Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="139,54,0,0"/>
</Grid>
</Window>
public partial class WindowA : Window
{
public WindowA()
{
InitializeComponent();
}
}
窗口B:
<Window x:Class="Test.WindowB"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WindowB" Height="221.918" Width="300">
<Grid>
<RadioButton Content="RadioButton" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="124,63,0,0"/>
</Grid>
</Window>
public partial class WindowB : Window
{
public WindowB()
{
InitializeComponent();
}
}
答案 0 :(得分:5)
ShowDialog()函数以模态方式调用窗口。这意味着windowA.ShowDialog()之后的代码;在该窗口关闭之前不会执行。
答案 1 :(得分:5)
在WPF中,您可以指定应用程序关闭的时间,默认情况下Application.ShutdownMode
为OnLastWindowClose
,这意味着当上一个Window
关闭时,应用程序会关闭,而在您的情况下,{{1}也是最后一次。当您首先打开和关闭Window
时,您的应用程序会关闭,这就是您没有看到第二个Window
的原因。您需要将Window
更改为ShutdownMode
OnExplicitShutdown
但这意味着即使关闭所有Windows应用程序仍在运行,因此您必须显式调用Application.Shutdown()
来关闭应用程序,例如关闭主窗口时。