谁能想到对话的结果是WPF中的无效布尔的一个很好的解释?这总是让我感到困惑。在Winforms中,这是一种枚举类型,对我来说更有意义。

有帮助吗?

解决方案

我认为这是这样做的,因为在大多数情况下,您不需要 广义专业 诸如重试或忽略之类的选项。

如果您需要多于确定/取消,则应使用某种任务对话框,例如带有窃听答案。这样,您就不仅限于几十年前想到的几个枚举价值观,而且对拨号符只是对基本使用的正/负面/负面的,您可以实现自己的特定于高级需求的属性。因此,仅需要true/fals,而null表示窗口尚未关闭(尚未分配给该属性的值)。

如果您有一个对话框不仅仅是用户应回答的问题(例如,输入表格),通常使用OK/CANCAL更好,因此您不需要更多的值。

其他提示

DialogResult 属性在 Window 班级。不是全部 WindowS是对话。因此,该属性与所有窗口无关。一个 Window 通过 Show() 而不是 ShowDialog() 将(大概是,除非您因某种原因设置) DialogResult = null.

这是一个简单的示例:

窗口1.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);
        }
    }
}

关闭窗户时,您会注意到对话框具有 DialogResultfalse, ,而非dialog有一个 null DialogResult.

根据 MSDN文档:

显示对话框时,拨号符为无效,但既不接受也不取消。

但是,除非您要处理访问对话框的多个线程,否则我不确定如何发生这种情况。

文档说当以下事情之一发生时是错误的:

  • PressAlt+F4。
  • 点击关闭按钮。
  • 从系统菜单中选择关闭。

Showdialog将始终返回True或False。 Dialogresult只有在打开对话框时才采取无效状态。从null过渡到True或Fals,将关闭对话框,并进行原始调用以showdialog返回。

IMO这是因为并不总是使用拨号。您会看到,只有通过其showdialog()方法调用窗口的窗口,如果您使用其show()方法调用它,然后尝试将dialogresult设置为任何东西,它将抛出invalidoperationException。因此,我认为这是可以无效的原因,如果您使用show()方法调用窗口,它将是无效的,如果您使用Showdialog()调用它,则取决于您。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top