WPF 在 Window 关闭时,无法将 Visibility 设置为 Visible如何解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 在 Window 关闭时,无法将 Visibility 设置为 Visible如何解决相关的知识,希望对你有一定的参考价值。

窗体关闭事件,想让用户点击关闭按钮时,实际上只是将窗体隐藏,重写了窗体关闭事件,代码如下:

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)

e.Cancel = true;
this.Visibility = System.Windows.Visibility.Visible;


报错:
在 Window 关闭时,无法将 Visibility 设置为 Visible,也无法调用 Show、ShowDialog、Close 或 WindowInteropHelper.EnsureHandle。

求解决方案。

参考技术A 你不是要隐藏么,为啥要设置为Visible呢,应该设置成Collapsed,或者直接调用this.Hide() 参考技术B

    最终是要达到什么效果

    你的文字描述是“点击关闭按钮时,实际上只是将窗体隐藏”,而你的代码却是相反。

本回答被提问者采纳

通过C# WinForm控件创建的WPF WIndow窗口控件无法输入的问题

原文:通过WinForm控件创建的WPF 控件无法输入的问题

今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行;但在我的机器上却是好好的。

最开始以为是输入法的问题,弄了好一阵子后,终于找到了原因:虽然这个程序是个WPF程序,但为了复用之前的部分代码,使用着一个WinForm的菜单控件,后续的子窗口都是通过这个WinForm菜单创建的。而用WinForm控件创建的WPF控件可能出现无法正确响应键盘事件的情况。

找到了原因后,一个常规的解决方法是:将WinForm控件换成WPF控件,如果WinForm控件比较容易替换的话用这种方式是可以一次性的解决问题的。但如果要复用之前的控件,则可以使用如下函数使能WinForm创建的窗口或使用了WinForm创建的控件的窗口。

方案1:非模态显示(show)

引用WindowsFormsIntegration.dll

System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(winWPF);
winWPF.Show();

方案2:模态显示(showdialog)

winWPF.ShowDialog();

 

相关文章: 解决Winform中弹出WPF窗体不能在文本框中输入的问题

以上是关于WPF 在 Window 关闭时,无法将 Visibility 设置为 Visible如何解决的主要内容,如果未能解决你的问题,请参考以下文章

wpf 一个窗体中点击空白部分关闭另一个窗体

WPF程序 当关闭一个窗体后,重新打开报错 关闭窗口之后无法设置 Visibility 或者调用 Show或ShowDialog

如何使用 WPF 用户控件关闭父窗口

WPF window页面跳转

通过关闭 MainWindow 返回值

wpf window窗口中嵌入一个window窗口