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()之前强制检查是最好的解决方案。