任何人都可以想到一個很好的解釋,因爲對話框的結果是WPF中的一個可爲空的布爾值?這一直讓我困惑。在WinForms中,它是一個枚舉類型,對我來說更有意義。爲什麼DialogResult是WPF中的一個可爲空的布爾值?
回答
在我看來,這是因爲在大多數情況下,你不需要廣義專門的選項,如重試或忽略。
如果您需要超過確定/取消,您應該使用某種任務對話框,例如,寫出答案。這樣,您不僅僅限於幾十年前人們想到的少數枚舉值,而且DialogResult對於基本使用只是正面/負面,您可以實現自己的屬性,該屬性特定於您的高級需求。因此只需要true/false,而null表示窗口尚未關閉(尚未爲該屬性賦值)。
如果您的對話不僅僅是用戶應該回答的問題(例如,一個參賽表格),通常OK/Cancel會更好,所以你不需要更多的值。
的DialogResult爲空時,將顯示對話框 框,但既不接受,也不 取消。
但我不確定這是怎麼發生的,除非你正在處理多線程訪問對話框。
文檔說是假的時,下面的事情發生一個:
- PressesALT + F4。
- 點擊關閉按鈕。
- 從系統菜單中選擇關閉。
的DialogResult
屬性是基於Window
類中定義。並非所有的Window
都是對話框。因此,該屬性與所有窗口無關。已經通過Show()
而不是ShowDialog()
顯示的Window
將會(假設,除非您由於某種原因而設置)具有DialogResult = null
。
這裏有一個簡單的例子來說明:
Window1.xaml:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<Button Name="b1">Show</Button>
<Button Name="b2">ShowDialog</Button>
</StackPanel>
</Window>
Window1.xaml.cs:
using System.Windows;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
b1.Click += new RoutedEventHandler(b1_Click);
b2.Click += new RoutedEventHandler(b2_Click);
}
void b1_Click(object sender, RoutedEventArgs e)
{
var w = new Window();
w.Closed += delegate
{
MessageBox.Show("" + w.DialogResult);
};
w.Show();
}
void b2_Click(object sender, RoutedEventArgs e)
{
var w = new Window();
w.ShowDialog();
MessageBox.Show("" + w.DialogResult);
}
}
}
當您關閉窗戶,你會注意到該對話框的DialogResult
爲false
,而非對話框有null DialogResult
。
雖然這是真實的並且可能是相關的,但在DialogResult枚舉中已經有一個'None'值,它在本例中非常舒適地實現了null的目的。所以我懷疑有一個空值是否有足夠的理由從已建立的模型中移出。 – 2009-06-12 15:45:03
ShowDialog將始終返回true或false。當對話框打開時,DialogResult只會處於空狀態。從null過渡到true或false將關閉對話框並對ShowDialog返回進行原始調用。
IMO這是因爲DialogResult並不總是被使用。你看,如果你的窗口被ShowDialog()方法調用,如果你用它的Show()方法調用它,並且設置DialogResult爲任何東西,它將會拋出一個InvalidOperationException,你只能設置DialogResult。所以我認爲這就是它可以爲空的原因,如果你使用Show()方法調用窗口,它將爲null,如果你使用ShowDialog()調用它,這取決於你。
- 1. 爲什麼WPF CheckBox中的IsChecked屬性爲可空布爾值?
- 2. 具有默認值的可爲空布爾值或布爾值?
- 3. 爲什麼graphql,紅寶石的布爾類型不是空值
- 4. 爲什麼我讓一個空值賦給布爾值?解決這個問題的最好方法是什麼?
- 5. 檢查是否可爲空的布爾爲空或不是
- 6. 爲什麼要用兩個'!'一個布爾值的運算符?
- 7. 爲什麼它總是一個空值?
- 8. 爲什麼可以將布爾數組寫入宗地而不是布爾值?
- 9. Kendo DropdownlistFor可爲空布爾值不設爲空值
- 10. 打開可空布爾值:如果值爲真,則爲空
- 11. 爲什麼我的布爾值返回一個整數?
- 12. 爲什麼RAZOR輸出一個大寫的布爾值?
- 13. 爲什麼VB.NET中的三元運算符接受可空布爾值?
- 14. 爲什麼WPF ListView中的組爲空?
- 15. 爲什麼我的值爲0的布爾值返回true?
- 16. 什麼是布爾值作爲返回值的方法?
- 17. Java檢查布爾值是否爲空
- 18. 爲什麼AND兩個數字要得到一個布爾值?
- 19. 如何從多個可空的布爾中返回一個布爾值?
- 20. 爲什麼我的布爾值總是正確的?
- 21. 爲什麼我的Ext.form.FormPanel發佈空值?
- 22. 爲什麼這個數組是2d數組布爾值true?
- 23. 爲什麼布爾值沒有改變?
- 24. 爲什麼不python返回布爾值
- 25. 爲什麼不布爾值切換?
- 26. @JoinFormula爲什麼hibernate前綴布爾值?
- 27. 爲什麼IDBKeyRange.only()不允許布爾值?
- 28. 爲什麼某個布爾值爲false雖然它應該是真的?
- 29. 什麼是將一個變量賦值爲零的布爾結果
- 30. MySQL DB:數據庫列,枚舉或兩個布爾列中的可爲空布爾值,哪一個更高效?
我認爲這發生在用戶點擊窗口右上角的關閉按鈕時。 – 2009-06-12 15:40:12
不是根據我鏈接到的文檔...我會編輯更多詳細信息 – 2009-06-12 15:46:44
@Max,如果你打電話給`Show`,然後通話返回給你(即它是一個非阻塞呼叫),所以你可以立即詢問「DialogResult」值。只有當你調用ShowDialog時,調用纔會被阻止,直到對話框被解除。但是,在後一種情況下,您仍然可以自由地從另一個線程詢問對象,就像您指出的那樣。 – 2009-11-06 16:44:27