【问题标题】:Wpf Reuse Window after window has been closed C# [duplicate]窗口关闭后Wpf重用窗口C# [重复]
【发布时间】:2016-01-22 10:23:43
【问题描述】:

我需要一些帮助才能让 ShowDialog 出现多次,在这种情况下为 2x 而不会出现如下错误:在窗口关闭后无法设置可见性或调用 Show、ShowDialog 或 WindowInteropHelper.EnsureHandle。任何帮助表示赞赏。

namespace Application
{
    public partial class App : Application
    {
        int count = 0;
        int logonAgreements = 2;

        while (count < logonAgreements)
        {     
            DialogResult = lf2.ShowDialog(logonAgreements, count + 1);

            if (DialogResult == true)
            {        
                count++;
            }
            else if (DialogResult == false)
            {
                Close();
            }
        }   

        public DialogResult ShowDialog(int numCustomer, int currentCustomerIndex)
        {   
            this.labelPanelHeader.Content = "Log-On Agreement" + " (" + currentCustomerIndex + " of " + numCustomer + ")";
            return this.ShowDialog();
        }

    }

}

【问题讨论】:

  • 错误信息对我来说似乎很清楚。 ShowDialog() 在窗口实际关闭之前不会返回,并且不允许您再次显示关闭的窗口。
  • 如果你能解释为什么你觉得你应该保留原来的对话框窗口对象,而不是每次你想显示它时都根据需要创建一个新对象,那将会很有帮助。正如错误所说,无论如何你都不能真正做到这一点——一旦对话框关闭,它就无法再次显示。通常,对话框状态将由一个单独的视图模型对象表示,您可以根据需要多次重复使用它。如果您提供有关您实际尝试做的具体细节,您可能会得到一个很好的答案来解决您更广泛的问题,即使直接的问题无法解决。
  • 我通过使用 while 循环再次创建了窗口。窗口 lf2 = 新窗口();这似乎正是我所需要的。

标签: c# wpf window show showdialog


【解决方案1】:

关闭它后你根本无法重复使用它,因为它的一些资源已被释放。

相反,在关闭事件中,取消关闭并将可见性设置为隐藏。 一旦您希望它再次显示,请将其设置为可见。

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        e.Cancel = true;
        this.Visibility = Visibility.Hidden;
    } 

【讨论】:

  • 然后他必须创建EventHandlers,或者至少我能想到的。
  • 其实我说错了。隐藏对话框会导致ShowDialog() 方法返回(文档不正确,它仅在窗口关闭 时返回)。但是,有一个不同的问题:只隐藏窗口而不关闭它,即使关闭主窗口,进程也不会正常退出。下次显示窗口时也存在潜在的渲染问题。一个好的答案将提供一个完整的解决方案,而不是产生更多新问题。
  • 问题是他坚持要再次使用他的表格,因为我之前读过它,我喜欢给他一个方法来做到这一点,虽然它不是那么好用..
  • “虽然使用起来不太好” -- 不,问题是使用您的代码甚至无法让事情正常工作。是的,您可以避免特定的异常,但其他各种事情都不起作用(例如,窗口在下次显示时无法正确显示,并且进程不会退出)。如果您对所有其他问题有解决方案,则应在答案中包含所有这些详细信息;如果你不这样做,你不应该首先建议上述作为答案。
  • 感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 2012-06-28
  • 2011-04-03
  • 2012-05-06
  • 1970-01-01
  • 2016-06-11
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多