2009-06-13 124 views
25

WPF的Window.ShowDialog方法返回一個可爲null的布爾值。那麼CommonDialog.ShowDialog什麼時候ShowDialog()返回null?

現在,我理解這些將返回false的情況(用戶單擊Cancel或按下Esc),並且它們何時會返回true(代碼將Window.DialogResult設置爲true,可能是對OK的單擊作出響應)。但是空?

我的第一個想法是單擊標題欄的關閉按鈕可能會返回null。但文檔狀態(和我通過測試證實)the title-bar Close button is treated as a Cancel

那麼當Window.ShowDialogCommonDialog.ShowDialog曾經返回null?

+0

你必須愛上MS文檔。 「A Nullable <(Of <(T>)>)Boolean類型的值,表示用戶如何關閉一個窗口。」哎,這有幫助。 – 2009-06-13 06:19:24

+0

聽起來像那種文檔,作者不允許與開發人員交談並提出問題,但只允許他們訪問他們在屏幕上的內容...... – SqlRyan 2009-06-13 06:52:50

回答

17

該方法始終返回true或false,並且這總是等於窗口關閉時的DialogResult屬性。

但是,在關閉窗口之前DialogResult屬性爲null,而另一個線程可以檢查該屬性。所以有意義的是返回值是一個可以爲空的布爾值來匹配屬性,即使它實際上從不爲null。

+0

不知道你在哪裏得到另一個線程可能的想法檢查DialogResult。如果你嘗試,你會得到一個InvalidOperationException異常(「調用線程不能訪問這個對象,因爲不同的線程擁有它。」) – 2009-06-13 06:43:25

2

如果我在按鈕的Click事件中返回DialogResult = null,則窗口保持打開狀態。

private void OkButton_Click(object sender, RoutedEventArgs e) 
{ 
    Button btn = sender as Button; 
    if (btn != null) 
    { 
     // forces all control to update... 
     btn.Focus(); 
    } 

    // TEST IF OK TO CLOSE 
    bool rc = _vm.ProcessOkCommand(); 
    if (rc) 
    { 
     DialogResult = true; 
    } 
    else 
    { 
     DialogResult = null; 
    } 
} 


<Button Content="OK" Name ="cmdOK" IsDefault="True" Click="OkButton_Click"/> 
相關問題