這些天從項目上接觸到了wpf,感覺有必要做一個筆記,首篇還是聊聊基本的概念,要學習wpf,我們需要采用webform的思維來考慮問題。
一:App環境承載
我們都知道,console和winform程式的入口函數都是main,wpf同樣也不例外,好了,我們建立一個wpf的程式,vs自動給我們生成了一個
MainWindow.xaml和App.xaml檔案。

微軟官方說wpf程式是從Application開始的,既然是開始總有個入口點吧,奇怪的是我們并沒有發現Main函數,程式又是如何Run起來的呢?
其實,wpf為了簡化我們的工作,把一些機械性的代碼透明了,那麼我們如何找到這個Main函數呢?很簡單,我們編譯一下程式,發現
App.xaml最後生成了App.g.cs的部分類,并且發現StartupUri是MainWindow.xaml,也就是說程式一運作,MainWindow.xaml将會啟動。
二:Wpf中Application的生命周期
我們知道webform中的Global檔案定義了一個應用程式的全局生命周期,或許有人問,生命周期能夠幹些什麼,其實幹的事情可多着呢,
比如我們可以做一些身份驗證,或者一些資訊的初始化,那麼wpf中到底有哪些對應的方法和事件呢?
1:OnStartup方法 => Startup 事件
這個就見名識意了,也就是上面一幅圖中的app.Run()的時候觸發。
2: OnSessionEnding方法 => SessionEnding 事件
系統關機前調用。
3:OnExit方法 => Exit事件
應用程式關閉前調用。
4:OnActivated方法 => Activated 事件
應用程式獲得焦點的時候觸發。
5:OnDeactivated方法 => DeActivated事件
應用程式失去焦點的時候觸發。
三:全局異常擷取
在webform中的Global檔案中有一個Application_Error方法,專門用來捕獲整個應用程式的異常,以至于不會出現“黃白頁”給使用者,以此來提高
系統的健壯性和安全性,那麼wpf中也有類似的方法嗎?當然,wpf跟webform神似,他有的我也有,這裡是一個DispatcherUnhandledException
事件,然後我們在OnStartup注冊一下就Ok了。
好,下面我們做了示例:
首先我們拖一個button,事件進行中故意抛出異常。
然後我們在Application_Error中進行處理,當然實際應用中應該是記一些log日志。
最後看一下效果,注意,我們的程式并沒有崩潰。