端午長假在家陪着女朋友, 幸福感滿滿,生活對於一只飽經憂患的程序猿來說也是非常重要的,也就暫時沒有更新博客。休假結束,回歸奮斗的日子了,開始繼續更新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,敬請關注!
如果覺得有幫助,右下角贊一下吧~ (* *)