Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止/关闭WPF窗口加载?_C#_Wpf - Fatal编程技术网

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

C# 如何防止/关闭WPF窗口加载?,c#,wpf,C#,Wpf,我有一个窗口,它会在显示之前做一些检查 public class MyDlg : Window { public MyDlg() { Initialized += new EventHandler(Window_Initialized); } private void Window_Initialized(object sender, EventArgs eventArgs) { if (!/*do some checkin

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

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();
        }
    }
}
如果“Dosomechecking”失败,上述代码将在加载窗口后立即关闭我的窗口。然而,这太晚了,因为我可以看到窗口只是出现和消失

我怎样才能关上窗户而不显示它

编辑: 构建MyDlg的人如下所示:

MyDlg dlg = new MyDlg ();
dlg.ShowDialog();

但我很难阻止调用“ShowDialog()”,因为它们是由其他人编写的(我正试图在某个库中编写MyDlg)

您可以在新窗口中创建splash dialog

并在窗口/对话框上设置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>

你可以在这里看到

当然,如果一切正常,请将属性更改回visible/default

我怎样才能关上窗户而不显示它

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

MyDlg dlg = new MyDlg();
//perform your check here...
dlg.ShowDialog();
…或在
MyDlg
窗口的构造函数中:

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

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

谁构建MyDlg?另外,使用谷歌为什么让它打开?您不能在打开之前限制它吗?我宁愿将检查移动到Load事件中。在某些MVVM实现中,ViewModel是在视图之后创建的,因此如果ViewModel创建引发异常,您不希望显示视图。通常,ViewModel是在Show被称为Hanks之前创建的,也许在
ShowDialog()之前强制检查是最好的解决方案。