WPF ShowDialog再次/几次

时间:2018-12-04 14:25:32

标签: wpf

我有一个带有“ settings-winwow”的WPF应用程序。如果我单击主窗口上的“信息”,则settings.showDialog();被称为-到目前为止一切顺利。它会打开,我可以做一些事情,当我关闭它并尝试再次打开它时,总线会出现错误。它叫做:

  

System.InvalidOperationException

     

HResult = 0x80131509

     

message =无法显示或定义可见性,ShowDialog或   窗口被打开后,不能调用WindowInteropHelper.EnsureHandle   关闭。

我发现了这一点:

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

在这里,但是我没有工作,或者我使用的方式不正确。有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

您只能在窗口上调用一次ShowDialog。对于下一个呼叫,您需要创建一个新窗口。

因此,单击“信息”时的代码应为:

.apk

答案 1 :(得分:0)

如果要重用该窗口,则应考虑使用Show而不是ShowDialogShowDialog将在您关闭窗口时破坏对象。使用“显示”不会阻止调用主窗口。在您的情况下,这可能是不可取的。

您粘贴的代码会隐藏而不是关闭窗口,从而防止破坏对象。如果要使用您的片段,请将其复制到窗口中。

您的XAML代码:

Window x:Class="WpfTestApp.DialogWindow"
    ...
    Closing="Window_Closing">

后面代码中的C#代码:

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

或使用Show代替:

DialogWindow.Show();

答案 2 :(得分:0)

您可以多次拨打Window.ShowDialog()

但是您应该从不调用Close()方法 (直到您不再想要使用控件为止:Close就像Dispose一样适用于控件)。

您可以使用Hide()

然后,对ShowDialog()的下一次调用应像Show()一样起作用。

隐藏对话框后,其他窗口和其他对话框应继续照常工作。

Close()呼叫转换为Hide()

protected override void OnClosing(CancelEventArgs e)
{
    e.Cancel = true;
    Hide();
}