我有一个带有“ 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;
}
在这里,但是我没有工作,或者我使用的方式不正确。有人可以帮助我吗?
答案 0 :(得分:1)
您只能在窗口上调用一次ShowDialog。对于下一个呼叫,您需要创建一个新窗口。
因此,单击“信息”时的代码应为:
.apk
答案 1 :(得分:0)
如果要重用该窗口,则应考虑使用Show
而不是ShowDialog
。 ShowDialog
将在您关闭窗口时破坏对象。使用“显示”不会阻止调用主窗口。在您的情况下,这可能是不可取的。
您粘贴的代码会隐藏而不是关闭窗口,从而防止破坏对象。如果要使用您的片段,请将其复制到窗口中。
您的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();
}