如何防止/关闭WPF窗口加载?

时间:2017-04-19 07:51:16

标签: c# wpf

我有一个窗口,它会在显示之前进行一些检查。

#include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h>

如果&#34;做一些检查&#34;失败,上面的代码将在加载窗口后立即关闭我的窗口。然而,这太晚了,因为我可以看到窗口出现并消失。

如何在不显示窗口的情况下关闭窗口?

编辑: 构建MyDlg的人就像:

public class MyDlg : Window
{
    public MyDlg()
    {
        Initialized += new EventHandler(Window_Initialized);
    }
    private void Window_Initialized(object sender, EventArgs eventArgs)
    {
        if (!/*do some checking*/)
        {
            Loaded += (s, e) => Close();
        }
    }
}

但是我很难阻止调用ShowDialog()&#39;因为它们是由其他人编写的(我试图在某些库中编写MyDlg)

2 个答案:

答案 0 :(得分:1)

  

如何在不显示窗口的情况下关闭窗口?

在调用窗口的ShowShowDialog方法之前执行检查。您可以在调用代码中执行此操作:

MyDlg dlg = new MyDlg();
//perform your check here...
dlg.ShowDialog();

...或在MyDlg窗口的构造函数中:

public MyDlg()
{
    //perform your check here...
}

显然,在调用Window_Initialized事件处理程序时已经显示了窗口,因此如果您不希望窗口出现则执行任何检查都为时已晚。您无法关闭尚未打开的窗口。

答案 1 :(得分:0)

您可以在新窗口中创建启动对话框。

在窗口/对话框上设置IsEnabled = False。

或者,如果您的操作很快,则无需启动。只需隐藏你的窗口:

<Window x:Class="Wpf.Test01.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Wpf.Test01"
        xmlns:charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
        mc:Ignorable="d"
        IsEnabled="False"
        WindowStyle="None"
        AllowsTransparency="True"
        Title="MainWindow" Height="350" Width="525">
    <Window.Background>
        <SolidColorBrush Opacity="0.0" Color="White" />
    </Window.Background>

你可以在WPF Window with transparent background containing opaque controls

看到它完成

当然,如果一切正常,则将属性更改回可见/默认值