Jer*_*ing 45 .net c# wpf singleton window
我试图Window
在需要的时候保留一个实例ShowDialog
.这在winforms中找到了,但是在WPF中我接受了这个例外:
System.InvalidOperationException:无法在Window关闭后设置Visibility或调用Show,ShowDialog或WindowInteropHelper.EnsureHandle.
有没有办法在WPF中做这样的事情?
MyWindow.Instance.ShowDialog();
public class MyWindow : Window
{
private static MyWindow _instance;
public static MyWindow Instance
{
if( _instance == null )
{
_instance = new Window();
}
return _instance();
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ris 47
我想如果你改变窗口的可见性而不是关闭窗口,你可以这样做.您需要在Closing()事件中执行此操作,然后取消关闭.如果你允许关闭发生,你肯定无法重新打开一个关闭的窗口 - 从这里:
如果未取消Closing事件,则会发生以下情况:
...
窗口创建的非托管资源将被释放.
在那之后,窗口将再次无效.
我不认为这是值得的努力 - 每次创建一个新窗口并没有太大的性能影响,你不太可能引入难以调试的bug /内存泄漏.(另外,当应用程序关闭时,您需要确保它关闭并释放它的资源)
只是读到你正在使用ShowDialog(),这将使窗口模态并简单地隐藏它将不会将控制返回到父窗口.我怀疑用模态窗口可以做到这一点.
Rai*_*ain 40
如果我没错,您可以取消该窗口的结束事件,而不是将隐藏的可见性设置为隐藏
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
this.Visibility = Visibility.Hidden;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试这个:
protected override void OnClosing(CancelEventArgs e)
{
this.Visibility = Visibility.Hidden;
e.Cancel = true;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
58794 次 |
最近记录: |