Pet*_*ebb 18 .net wpf api-design dialogresult
任何人都可以想到一个很好的解释,因为对话的结果是WPF中可以为空的bool吗?这一直困扰着我.在WinForms中它是一个枚举类型,这对我来说更有意义.
Ken*_*art 15
该DialogResult
属性在Window
类上定义.并非所有Window
的都是对话框.因此,该属性与所有窗口无关.一个Window
已经通过图示Show()
而非ShowDialog()
意志(大概是,除非你把它出于某种原因)有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>
Run Code Online (Sandbox Code Playgroud)
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当您关闭窗口,你会发现,在对话框中有一个DialogResult
的false
,而非对话框有一个null DialogResult
.
在我看来,这是因为在大多数情况下你不需要像Retry或Ignore这样的通用专用选项.
如果您需要的不仅仅是OK/Cancel,那么您应该使用某种任务对话框,例如使用书面答案.这样,你不仅限于几十年前有人想到的几个枚举值,而且DialogResult对于基本用途只是正面/负面的,你可以实现自己的特性以满足你的高级需求.因此,只需要true/false,并且null表示窗口尚未关闭(尚未为该属性分配值).
如果您的对话框不仅仅是用户应该回答的问题(例如输入表单),那么通常情况下,使用"确定/取消"会更好,因此您不需要更多值.
归档时间: |
|
查看次数: |
8290 次 |
最近记录: |