WPF中的ShowDialog

时间:2013-07-17 10:46:21

标签: c# wpf

当我在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();
    }
}

2 个答案:

答案 0 :(得分:5)

ShowDialog()函数以模态方式调用窗口。这意味着windowA.ShowDialog()之后的代码;在该窗口关闭之前不会执行。

答案 1 :(得分:5)

在WPF中,您可以指定应用程序关闭的时间,默认情况下Application.ShutdownModeOnLastWindowClose,这意味着当上一个Window关闭时,应用程序会关闭,而在您的情况下,{{1}也是最后一次。当您首先打开和关闭Window时,您的应用程序会关闭,这就是您没有看到第二个Window的原因。您需要将Window更改为ShutdownMode

OnExplicitShutdown

但这意味着即使关闭所有Windows应用程序仍在运行,因此您必须显式调用Application.Shutdown()来关闭应用程序,例如关闭主窗口时。