2017-04-19 55 views
0

我有一個窗口,它會在顯示之前進行一些檢查。如何防止/關閉WPF窗口加載?

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

如果「做一些檢查」失敗,上述代碼將在窗口加載後立即關閉我的窗口。但是這太遲了,因爲我可以看到窗口剛好出現並消失。

如何關閉窗口而不顯示它?

編輯: 誰將建MyDlg的一個是這樣的:

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

但它是我很難防止調用「的ShowDialog()」,因爲它們是由其他人寫的(我想在某些庫中編寫MyDlg)

+0

誰構建MyDlg?此外,使用谷歌http://stackoverflow.com/questions/1539958/wpf-showing-dialog-before-main-window – ilansch

+2

爲什麼讓它打開?你不能在開放之前限制它嗎? –

+0

我寧願將支票移至Load事件中。 –

回答

1

如何關閉我的窗口,不顯示它?

在調用窗口的方法ShowShowDialog之前執行檢查。你可以做這一點在調用代碼:

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

...或MyDlg窗口的構造函數:

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

顯然已經由Window_Initialized事件處理程序獲取時所顯示出的窗口如果您不希望窗口出現,那麼執行任何檢查都爲時已晚。您無法關閉尚未打開的窗口。

+0

謝謝,也許在'ShowDialog()'之前檢查是最好的解決方法。 – Dia

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

當然做更改屬性回可見光/默認值,如果一切正常