2

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

有没有办法在不关闭模式对话框的情况下暂时隐藏它?

4

3 回答 3

1

对我有用的解决方法:

为了防止在设置 DialogResult 后关闭窗口,请创建您自己的 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;
            }
        }
    }
于 2015-12-03T12:52:35.747 回答
0

这不处理结果,但看看如何从页面返回数据
PageModal is a Page
You use NavigationWindow for the modal part

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();
    }
}
于 2014-11-18T18:42:03.197 回答
0

好的,不透明度正在工作。我只是让它被完成的动画(具有 HoldEnd 行为)阻止,我不知道它。因此,如果有人遇到同样的问题并且需要隐藏模态窗口,这Opacity = 0;就是解决方案。

于 2014-11-20T10:49:09.410 回答