2000條你應知的WPF小姿勢 基礎篇<22-27 WPF生命周期, 基礎類等>


  端午長假在家陪着女朋友, 幸福感滿滿,生活對於一只飽經憂患的程序猿來說也是非常重要的,也就暫時沒有更新博客。休假結束,回歸奮斗的日子了,開始繼續更新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>WPF, 渲染, 矢量, 布局, 樣式, 模板, 命令 , <8-14>xaml, page, 3d, version, wpf, silverlight,asp.net<15-21>

 

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


  #22 Control Class

  Control Class 繼承自FrameworkElement,是與用戶交互的所有控件的基類。例如有:TextBox, Label, ListBox, ComboBox and Button。但有一些容器比如Panel和Grid並不是控件。

  Control Class 擴展了FrameworkElement,擁有如下延伸的功能:

  1. 通過使用Template來更改控件的外觀。

  2. 支持更改字體,邊框, 背景色等視覺元素。

 

  

  #23 WPF項目的五種形態

  使用WPF你可以開發如下五種形態的項目:

  1. 獨立的應用程序 - 在Windows上運行的標准的窗口程序。

  2. XAML 瀏覽器應用程序(XBAP) - 在瀏覽器上運行的基於Page的應用程序

  3. 自定義控件庫 - 繼承自Control並對其改寫,私人定制,封裝成dll庫。

  4. 用戶控件庫 - 從UserControl派生創建的自定義控件,封裝成dll庫。

  5. 基礎類庫 - 封裝一般類為dll庫。

 

  #24 Application Class

  Application class 呈現了一個在windows上運行的一個獨立的wpf客戶端應用程序。每個運行中的WPF應用程序都具有一個application類的單例。

  使用VS創建的WPF應用程序會在App.Xaml自動生成Application對象定義的應用程序:

  

<Application x:Class="WpfApplication9.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>

  Application類負責:

  1. 管理應用程序的生命周期(如Start和Close)

  2. 管理窗口,資源以及各種項目的基礎屬性。

  3. 命令行處理

  4. 頁面導航。

 

  #25 Window Class

  Window Class 在WPF中呈現了一個窗口。他派生自ContentControl, 也就是說它只能有單一的子元素。它直接繼承自Control,間接繼承了FrameworkElement, UIElement, Visual, DependencyObject, and DispatcherObject.

  一個窗口在視覺的角度上擁有一個客戶端區域(窗口內)和非客戶端區域(標題欄,框架,最小/最大/關閉 按鈕).它是跟用戶交互的WPF獨立程序的外殼。可以通過定制來實現不同的外觀效果。

  你可以通過啟動,關閉,隱藏,顯示等事件來管理一個window的生命周期。

  Xaml Code:

  

<Window x:Class="WpfApplication9.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 Title="MainWindow" Height="200" Width="250">
    <Grid>
        <Label Content="I'm a WPF Window!" Height="28" HorizontalAlignment="Center" VerticalAlignment="Center" />
    </Grid>
</Window>

  效果:

  

  #26 WPF生命周期

  下圖展現了WPF的生命周期以及其事件:

  

 

  Application相關觸發的主要事件有:

  1. Startup - 應用程序啟動

  2. Exit - 應用程序關閉。

  3. Activated - 應用程序獲得焦點時觸發,也就是成為前台程序。

  4. Deactivated - 應用程序失去焦點時,也就是不再是前台程序時。

  5. DispatcherUnhandledException - 當一個異常被拋出時,你可以選擇處理或者是拋出該異常。

  6. SessionEnding - Windows正在關閉時,無論是注銷還是關機,都會觸發該事件。你可以選擇取消關機。

  

  你可以通過重寫On[EventName]方法來添加對事件的處理, 如  OnStartUp。

 

  

  #27 Window Events at Startup and Shutdown 窗口在創建和關閉時相繼觸發的事件

  Window StartUp時會觸發的事件有:

  

  • Initialized - Main window is being created
  • IsVisibleChanged - IsVisible property set to true
  • SizeChanged - Size property set to size of window
  • LayoutUpdated - Window layout changes
  • SourceInitialized - Window is attached to Win32 window handle
  • Activated - Window becomes foreground window
  • PreviewGotKeyboardFocus - Window getting focus
  • IsKeyboardFocusWithinChanged - IsKeyboardFocusWithin property set to true
  • IsKeyboardFocusedChanged - IsKeyboardFocused property set to true
  • GotKeyboardFocus - Window now has keyboard focus
  • LayoutUpdated - Window layout changes
  • Loaded - Window is now laid out, fully rendered
  • ContentRendered - All window content has been rendered

  Window ShutDown時觸發的事件有:

  

  • Closing - Window is going to close
  • IsVisibleChanged - IsVisible property set to false
  • Deactivated - Window becomes background window
  • IsKeyboardFocusWithinChanged - IsKeyboardFocusWithin property set to false
  • IsKeyboardFocusedChanged - IsKeyboardFocused property set to false
  • LostKeyboardFocus - Window no longer has keyboard focus
  • Closed - Window is closing

  

 

  后篇會有對這些事件以及更多WPF基礎和呈現機制的tip,敬請關注!

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

 

 


免責聲明!

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



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