2000條你應知的WPF小姿勢 基礎篇<28-33 WPF啟動故事>


  在正文開始之前需要介紹一個人:Sean Sexton. 來自明尼蘇達雙城的軟件工程師。最為出色的是他維護了兩個博客:2,000Things You Should Know About C#  和 2,000 Things You Should Know About WPF 。他以類似微博式的150字簡短語言來每天更新一條WPF和C#重要又容易被遺忘的知識。Follow他的博客也有一段日子了,很希望能夠分享給大家。

  本系列我不僅會翻譯他的每一個tip,也會加入自己開發之中的看法和見解。本系列我希望自己也能和他一樣堅持下來,每天的進步才能促成偉大。

  在這里鄭重說明.該系列是基於Sean Sexton先生的英文博客, Sean Sexton擁有全部版權和撤銷權利。

 

  前文:<1-7> , <8-14>,<15-21>,<22-27>

 

  [小九的學堂,致力於以平凡的語言描述不平凡的技術。如要轉載,請注明來源:小九的學堂cnblogs.com/xfuture]


  #28 WPF入口

  對於使用VS新項目創建方式創建的WPF獨立應用程序,該程序的入口是定義在App.g.cs(自動生成的代碼)的Main方法。在默認的項目配置里,是 public static void App.Main(), 是一個靜態方法。

  一般來說,一個.net程序的入口是在在其入口類的Main函數,如果一個項目中擁有多個靜態的Main方法,則需要在項目屬性中配置入口的類。在啟動對象下拉框,選擇包含Main函數的類,作為啟動時調用的類。

  

 

  

  #29 在WPF Main()中發生的故事

  當你使用VS創建了一個WPF獨立程序的時候,VS會自動生成一個繼承自System.Windows.Application的App類,里面包含了入口的Main()靜態函數。這是定義:public partial class App : Application

  在Main()函數中,應用程序通過以下三步來進行啟動:

  1. 創建一個Application的實例

  2. 調用Application.InitializeComponent方法來構建整個應用。

  3. 調用Application.Run方法來啟動應用。

  代碼如下:

  

public static void Main()
{
    WpfApplication.App app = new WpfApplication.App();
    app.InitializeComponent();
    app.Run();
}

  

  #30 單例

  

  System.Application類是單例,意味着你最多在一個WPF Application中創建一個Application的實例,如果你創建了第二個Application的實例,程序就會拋出InvalidOperationException異常。

  你可以通過靜態屬性Application.Current來訪問當前的Application類。或者使用派生的App類,App.Current

 

  #31 兩種創建WPF控件的方式

  在WPF中你可以通過以下兩種方式來創建控件:

  1. 編程的方式:使用C# code

  2. 聲明式:使用XAML來聲明控件

  舉個例子: 程序啟動需要指定起始的Window。

  代碼方式:

  

private void Application_Startup(object sender, StartupEventArgs e)
{
    MainWindow win = new MainWindow();
    win.Show();
}

  Xaml:

  

<Application x:Class="WpfApplication.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
    </Application.Resources>
</Application>

  兩種最終實現的效果相同,打開了MainWindow。

  

  #32 WPF生命周期

  WPF Startup Event處理的函數中可以得到傳遞來的命令行參數並且進行處理。

  命令行的參數可以在StartupEventArgs.Args找到。args是傳入的命令行參數的string 數組。

  代碼如下:

  

private void Application_Startup(object sender, StartupEventArgs e)
{
    foreach (string s in e.Args)
    {
        MessageBox.Show(string.Format("Arg: {0}", s));
    }
}

  其實一般做法是重寫其OnStartup方法來代替其startupevent handler

protected override void OnStart(string[] args) { }

  

  #33 監聽Windows會話

  當一個用戶關閉Windows或者機器的時候,WPF可以監聽到其事件並可以發出警告。事件名稱為Application.SessionEnding,在用戶注銷和關機時觸發。

  通過設置SessionEndingCancelEventArgs.Cancel 為true,可以阻止其注銷/關機行為:

  

private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e)
{
   MessageBoxResult res = MessageBox.Show("Exiting Windows will terminate this app.  Are you sure?", "End Session", MessageBoxButton.YesNo);
   if (res == MessageBoxResult.No)
   {
       e.Cancel = true;
   }

  需要注意的是,這個事件是windows停止時觸發,並不是該WPF應用程序關閉時觸發。

  在Win7以上系統,如果你的應用取消了SessionEnding的事件,Windows會通知你你的應用程序阻止了其關機:

  

  

 

 

  后篇會對WPF內部機制繼續做探索,敬請關注!

  如果覺得有幫助,右下角贊一下吧~ (* *)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM