WPF:如何隐藏模态对话框而不破坏它? (它的DialogResult)

时间:2014-11-18 15:50:21

标签: wpf modal-dialog hide dialogresult

我有一个模态对话框和(当用户按下OK按钮时)我想隐藏它,显示另一个模态对话框(例如MessageBox)然后再显示它。我的问题是,当对话框被隐藏时,它的DialogResult会得到false,当然它会在按钮的处理程序方法结束后立即关闭。我甚至试图将不透明度设置为0而不是Hide(),但这根本不起作用(它仍然可见)。

有没有办法暂时隐藏模式对话框没有关闭它?

3 个答案:

答案 0 :(得分:0)

这不涉及结果,但是看看如何从页面返回数据 PageModal是一个页面 您将NavigationWindow用于模态部分

public partial class MainWindow : Window
{
    private PageModal pageModal = new PageModal();
    public MainWindow()
    {
        InitializeComponent();
    }

    private void btnLaunchModal(object sender, RoutedEventArgs e)
    {
        NavigationWindow navWindow = new NavigationWindow();
        navWindow.Content = pageModal;
        navWindow.ShowDialog();
    }
}

答案 1 :(得分:0)

好的,不透明度正在发挥作用。我刚刚用完成的动画(使用HoldEnd行为)阻止它,我并不知道它。因此,如果任何人遇到同样的问题并且需要隐藏模态窗口,那么Opacity = 0;就是解决方案。

答案 2 :(得分:0)

对我有用的解决方法:

要在设置DialogResult时阻止窗口关闭,请改为创建自己的DialogResult:

  

public new bool DialogResult;

现在您仍然可以设置变量并选择Hide()而不是Close()。 所以在设置DialogResult的所有地方我都添加了一个

  

隐藏();

所以我看起来像这样:

DialogResult=true;
Hide(); 

DialogResult=false;
Hide(); 

这样我可以再次使用新的ShowDialog()。

因此,如果我需要重新打开窗口,直到内容正确(如果在关闭后验证发生),它将看起来像这样:

    public void ShowDialog()
    {
        var dialog = new MyDialog();
        bool ok = false;
        while (!ok)
        {
            dialog.ShowDialog();
            if (dialog.DialogResult)
            {
                ok = DoSomeValidation();
            }
            else
            {
                ok = true;
            }
        }
    }