WPF解决有时候Application.Current为NULL的问题

WPF做UserControl之类的时候,有时候UserControl嵌入到WinForm里使用,这时候,Application.Current会不存在,而把这个UserControl改成Application运行,则可以正常运行。那是因为这个Application是定义在App.xaml里的,UserControl方式编译,没有使用它,从而导致Application是没有定义的。
自己写的代码部分可以规避这个,然而如果引用了第三方的组件,需要调用这个Application.Current的时候,比如使用CrystalReportsViewer在UserControl里显示报表,按“打印”按钮的时候,它就会发生Application.Current是null的错误。
要解决它的办法是,把下面的代码放到UserControl的构造器或者加载事件里,人为给它生成一个Application即可:

if (System.Windows.Application.Current == null)
{
    new System.Windows.Application();
}

上面的代码能解决前面提到的问题,可是会有一个问题是,默认Application会在它所拥有的最后一个WPF窗口的关闭而关闭,第一次使用CrystalReportsViewer打印完关闭报表查看界面,第二次再在这个UserControl里调用CrystalReportsViewer窗口来打开报表的时候,会显示 Application已经被关闭的错误。
要解决这个错误,我们在新建Application的时候指定这个Application必须被显式的关闭就好了,代码如下:

if (System.Windows.Application.Current == null)
{
    var app = new System.Windows.Application
    {
        // 设置为显式关闭,防止窗口关闭时 Application 被自动终结
        ShutdownMode = ShutdownMode.OnExplicitShutdown
    };
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容