3

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

2 回答 2

5

在 WPF 中,您可以指定应用程序何时关闭,默认情况下Application.ShutdownModeOnLastWindowClose这意味着当最后一个Window关闭应用程序时,应用程序将关闭,在您的情况下,第一个Window也是最后一个。当您首先打开和关闭Window时,您的应用程序将关闭,这就是您看不到 second 的原因Window。您需要更改ShutdownModeOnExplicitShutdown

<Application ... ShutdownMode="OnExplicitShutdown"/>

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

于 2013-07-17T11:01:43.827 回答
4

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

于 2013-07-17T10:48:25.623 回答