WPF解決有時(shí)候Application.Current為NULL的問題

WPF做UserControl之類的時(shí)候,有時(shí)候UserControl嵌入到WinForm里使用,這時(shí)候,Application.Current會不存在,而把這個(gè)UserControl改成Application運(yùn)行,則可以正常運(yùn)行。那是因?yàn)檫@個(gè)Application是定義在App.xaml里的,UserControl方式編譯,沒有使用它,從而導(dǎo)致Application是沒有定義的。
自己寫的代碼部分可以規(guī)避這個(gè),然而如果引用了第三方的組件,需要調(diào)用這個(gè)Application.Current的時(shí)候,比如使用CrystalReportsViewer在UserControl里顯示報(bào)表,按“打印”按鈕的時(shí)候,它就會發(fā)生Application.Current是null的錯(cuò)誤。
要解決它的辦法是,把下面的代碼放到UserControl的構(gòu)造器或者加載事件里,人為給它生成一個(gè)Application即可:

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

上面的代碼能解決前面提到的問題,可是會有一個(gè)問題是,默認(rèn)Application會在它所擁有的最后一個(gè)WPF窗口的關(guān)閉而關(guān)閉,第一次使用CrystalReportsViewer打印完關(guān)閉報(bào)表查看界面,第二次再在這個(gè)UserControl里調(diào)用CrystalReportsViewer窗口來打開報(bào)表的時(shí)候,會顯示 Application已經(jīng)被關(guān)閉的錯(cuò)誤。
要解決這個(gè)錯(cuò)誤,我們在新建Application的時(shí)候指定這個(gè)Application必須被顯式的關(guān)閉就好了,代碼如下:

if (System.Windows.Application.Current == null)
{
    var app = new System.Windows.Application
    {
        // 設(shè)置為顯式關(guān)閉,防止窗口關(guān)閉時(shí) Application 被自動終結(jié)
        ShutdownMode = ShutdownMode.OnExplicitShutdown
    };
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容