【问题标题】:WPF: How to Hide a modal dialog box without destroying it? (its DialogResult)WPF:如何隐藏模式对话框而不破坏它? (它的 DialogResult)
【发布时间】:2015-01-15 21:04:36
【问题描述】:

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

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

【问题讨论】:

    标签: wpf modal-dialog hide dialogresult


    【解决方案1】:

    对我有用的解决方法:

    为防止在设置 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;
                }
            }
        }
    

    【讨论】:

      【解决方案2】:

      这不处理结果,但看看如何从页面返回数据
      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();
          }
      }
      

      【讨论】:

      • 所以...您只是说没有办法隐藏模式窗口并将其带回 WPF...您建议我替换其内容而不是隐藏它?我说的对吗?
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        • 1970-01-01
        • 2019-03-09
        • 2016-06-10
        相关资源
        最近更新 更多