错误时重新询问对话框

时间:2013-05-06 09:48:16

标签: c# wpf dialog

我正在尝试创建一个用户可以在某些按钮之间进行选择的对话框,但我现在遇到的问题是当用户关闭窗口时(不是选择按钮而是使用右上角的x)角落),应用程序显示消息,但之后它崩溃了。有谁知道我在做错了什么?

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    string[,] suppliers = new string[3,2] {{"xxx", "xxx"}, {"yyy", "yyy"}, {"zzz" , "zzz"}};


    public MainWindow()
    {
        InitializeComponent();

        ButtonPrompt buttonPrompt = new ButtonPrompt(suppliers, "Select supplier.");

        while (buttonPrompt.ShowDialog() != true)
        {
            MessageBox.Show("Please choose one of the suppliers!");
        }

    }
}

ButtonPrompt.xaml.cs:

public partial class ButtonPrompt : Window
{
    public ButtonPrompt(string[,] buttons, string question)
    {
        InitializeComponent();

        buttonStack.Children.Clear();

        TextBlock questionBlock = new TextBlock();
        questionBlock.Text = question;

        buttonStack.Children.Add(questionBlock);

        for (int i = 0; i < buttons.GetLength(0); i++)
        {
            Button inputButton = new Button();

            inputButton.Name = buttons[i, 0];
            inputButton.Content = buttons[i, 1];

            inputButton.Width = 200;
            inputButton.Height = 60;

            inputButton.Click += inputButton_Click;

            buttonStack.Children.Add(inputButton);

            if (i == 0)
            {
                inputButton.Focus();
            }
        }


    }

    private void inputButton_Click(object sender, RoutedEventArgs e)
    {
        Button inputButton = (Button)sender;
        this.DialogResult = true;
    }

    private void Window_Closed(object sender, EventArgs e)
    {
        this.DialogResult = false;
    }
}

提前致谢!

1 个答案:

答案 0 :(得分:3)

关闭窗口时buttonPrompt.ShowDialog()返回true。 有关Window_Closed

的文档说明
  

引发此事件后,无法阻止窗口关闭。

这意味着你无法设置DialogResult因为它已经是真的而你的同时不起作用。

您有三种可能性:

  1. 覆盖How to override default window close operation?中的OnClosing方法,以防止窗口从GUI按钮关闭。
  2. (我最喜欢的)覆盖OnClosing事件,例如http://msdn.microsoft.com/it-it/library/system.windows.window.closing.aspx检查您自己的条件并添加this.DialogResult = false
  3. 从XAML设置WindowStyle=None
  4. 隐藏对话窗口的关闭按钮

    更新:另一方面,请在主窗口初始化时暂停检查,尝试使用Loaded处理程序,这样您就可以确保主要组件在启动时没有问题。