由于.NET 2.0和3.0共享同樣的CLR,在.NET 2.0中編寫的任何程序都可以運(yùn)行于.NET 3.0中,這是和以前版本的一個(gè)重要而顯著的區(qū)別。以改變來(lái)看,對(duì)于那些喜歡代數(shù)方程的人來(lái)說(shuō),它們之間的關(guān)系可以總結(jié)為下面的公式:
???
?.NET 3.0 = .NET 2.0 + WCF + WPF + WCS + WF
.NET Framework 3.0通過(guò)4個(gè)關(guān)鍵的、以標(biāo)準(zhǔn)為基礎(chǔ)的支柱來(lái)對(duì)應(yīng)我們客戶要求和驗(yàn)證的領(lǐng)域,以達(dá)成上述目標(biāo)。它也包含了一個(gè)重要的叫做XAML的新語(yǔ)言。XAML是一個(gè)基于XML的聲明性語(yǔ)言,通過(guò)XML定義對(duì)象和它們的屬性,允許客戶聲明性地開發(fā)工作流(WF)和身臨其境的用戶體驗(yàn)(WPF)?
Windows Presentation Foundation試圖彌合在游戲和娛樂(lè)產(chǎn)業(yè)中常見的身臨其境的用戶體驗(yàn)和在業(yè)務(wù)軟件世界中靜態(tài)又難用的界面之間的差距。WPF利用XAML讓你無(wú)需成為圖形設(shè)計(jì)師就能盡情地開發(fā)下一代界面。
從構(gòu)架的角度看,WPF通過(guò)分離圖形元素和業(yè)務(wù)邏輯來(lái)保持一個(gè)非常清晰的劃分。一個(gè)設(shè)計(jì)師可以使用Expression產(chǎn)品線和XAML來(lái)創(chuàng)建視圖,而開發(fā)人員可以使用Visual Studio和C#來(lái)編寫代碼。
近年來(lái)另外一個(gè)需要更多關(guān)注的技術(shù)是SilverLight。SilverLight不是.NET 3.0框架的一部分。SilverLight是一個(gè)具有自己運(yùn)行時(shí)的跨瀏覽器、跨平臺(tái)的插件,它用于開發(fā)下一代微軟基于.NET的多媒體程序和豐富交互的Web應(yīng)用程序,他是微軟與Flash競(jìng)爭(zhēng)的有力產(chǎn)品。
??
本W(wǎng)PF培訓(xùn)課程(應(yīng)用與實(shí)踐部分)主要詳細(xì)講解了如何基于.NET 3.0架構(gòu)來(lái)開發(fā)WPF應(yīng)用程序。.NET 3.0及其包含的新組件的含義、系統(tǒng)環(huán)境的安裝設(shè)置、XAML語(yǔ)言及控件的使用,WPF應(yīng)用程序編程中的重要技術(shù):布局、容器、窗口與導(dǎo)航、、控件、XAML、輸入輸出、事件模型、數(shù)據(jù)綁定,等,力求將每一個(gè)技術(shù)點(diǎn)深入淺出,娓娓道來(lái)。
???
本次培訓(xùn)針對(duì)有初步C#語(yǔ)言基礎(chǔ)的朋友,最少學(xué)習(xí)過(guò)C#2.0,學(xué)過(guò)C#3.0就更好了,課程講解過(guò)程中結(jié)合典型的實(shí)例,逐一剖析,幫助大家快速掌握和精通WPF編程思想和技巧,提高編程能力和水平,并掌握SilverLight的金鑰匙。
???
該課程每節(jié)課45分鐘,共40課時(shí),教學(xué)方法:采用手把手,現(xiàn)場(chǎng)敲寫的方式,全程展示代碼從無(wú)到有的過(guò)程。?
開發(fā)環(huán)境:?Microsoft Visual Studio 2008+Microsoft SQL Server 2005
?
您即將要學(xué)到的技術(shù)如下:(真正的物有所值)
?
?1、WPF 體系結(jié)構(gòu)
a)WPF(Windows Presentation Foundation)Windows 表現(xiàn)層
b)歷史變遷
i.C++ /VB? ---2003年之前----與Sun競(jìng)爭(zhēng)
ii.DotNet平臺(tái)(C#、VB、C++)???? C#(C->C++->C#/CSharp)
iii.開發(fā)工具Visual Studio2003->vs2005->vs2008->vs2010
iv.開發(fā)語(yǔ)言C#1.0(CLR)->C#2.0(匿名、泛型)->C#3.0(LinQ、Lambda)->C#4.0
v.運(yùn)行時(shí)環(huán)境DotNet Framework1.1->2.0->3.5->…(托管代碼處理GDI,調(diào)用底層的OS下的API(如user32.dll))
vi.推出背景:配合下一代OS技術(shù)(Window Seven/Vista)(非托管代碼處理DirectX,矢量技術(shù),性能受影響)
vii.與Window Form孑然不同
c)見圖:繪圖使用DirectX技術(shù)
?
2、WPF 應(yīng)用程序管理、事件、生命周期
a)Application啟動(dòng)
i.Startup事件訂閱加載方法
this.Startup += new System.Windows.StartupEventHandler(this.Application_Startup);
ii.設(shè)定Application的StartupUri
b)關(guān)閉
i.當(dāng)我們啟動(dòng)了很多窗口的時(shí)候,這些窗口繼宿在主線程內(nèi),當(dāng)所有窗口關(guān)閉時(shí),應(yīng)用程序自動(dòng)退出
ii.Application.Current.Shutdown();不同于this.close();
iii.常見事件
iv.生命周期見圖
v.源代碼?MSIL?機(jī)器語(yǔ)言(先編譯后解釋)
?
3、WPF 窗體與導(dǎo)航—基于代碼
a)項(xiàng)目常見設(shè)置
i.AssemblyInfo.cs中設(shè)置產(chǎn)品信息(描述,版本…)
ii.設(shè)置產(chǎn)品圖標(biāo)*.ico,程序集名
b)常見屬性、方法、事件
i.屬性
1.Tilte:標(biāo)題
2.Icon:窗口
3.ResizeMode:是否能最大化、最小化、拉伸窗口邊框
4.WindowStyle:設(shè)置窗口的外部樣式
5.WindowStartupLocation:窗口啟動(dòng)后出現(xiàn)的位置
6.Opacity:設(shè)置透明度
7.Topmost:窗口將永遠(yuǎn)置于最頂層.?
9.Left、Top、Width、Height:設(shè)置窗口呈現(xiàn)的坐標(biāo)以及大小
10.Forground/Background:設(shè)置前、背景色
11.Font---:字體的相關(guān)信息
12.IsEnabled:設(shè)置對(duì)象是否啟用/禁用
13.Tag:任何對(duì)象隱藏的屬性,可用于保存一些額外的信息
ii.方法
1.Show()
2.ShowDialog():窗口的返回值由DialogResult來(lái)設(shè)置
3.A窗口向B窗口傳遞值:
a)在B窗口中設(shè)置一個(gè)屬性,然后A窗口中實(shí)例化B時(shí),賦值給B中的該屬性(在多窗口中傳值不頻繁的時(shí)候使用,以及傳遞的數(shù)據(jù)并不多的時(shí)候)
b)定義一個(gè)靜態(tài)類,以及若干靜態(tài)成員,然后通過(guò)get/set訪問(wèn)器來(lái)實(shí)現(xiàn)獲取或設(shè)置值(在多窗口之間頻繁的傳遞值,以及窗口之間傳遞值過(guò)多時(shí))
iii.事件
iv.SystemParameters獲取系統(tǒng)的環(huán)境設(shè)置信息
v.?
c)模式與非模式窗口
d)基于頁(yè)面的用戶界面
類似于java中的 Applet程序,在一個(gè)沙箱內(nèi)部運(yùn)行WPF的程序,對(duì)外部數(shù)據(jù)的訪問(wèn)受限制,從而達(dá)到安全目的。
與SilverLight的區(qū)別: SilverLight利用頁(yè)面插件來(lái)工作的,XBP則是運(yùn)行在CLR之上的程序.
e)導(dǎo)航服務(wù)
i.頁(yè)面跳轉(zhuǎn)的方式:
1.內(nèi)部標(biāo)簽<Hyperlink>來(lái)實(shí)現(xiàn)跳轉(zhuǎn)
2.導(dǎo)航服務(wù)來(lái)實(shí)現(xiàn)跳轉(zhuǎn)
ii.其他的設(shè)計(jì)與WPF下的設(shè)計(jì)雷同
f)不規(guī)則窗體
i.繪圖標(biāo)簽
ii.窗體過(guò)濾
g)消息框
i.MessageBox.Show(x,y,z,m,n)
?
4、XAML 與XML
a)XAML數(shù)據(jù)
i.XAML是XML的子集,遵循了XML的語(yǔ)言結(jié)構(gòu)
ii.XML是可拓展的標(biāo)記語(yǔ)言,也是元語(yǔ)言,XAML就是在XML的基礎(chǔ)上拓展而來(lái)
iii.XAML基本規(guī)范:
1.標(biāo)記是成對(duì)出現(xiàn)的.<標(biāo)記>數(shù)據(jù)</標(biāo)記>
2.標(biāo)記區(qū)分大小寫
3.只有唯一的根元素<Window></Window>
4.標(biāo)記支持嵌套,呈現(xiàn)出父子元素關(guān)系
5.每一個(gè)元素的名稱、屬性名都是有意義的
6.如果元素內(nèi)部無(wú)數(shù)據(jù),那么<Image> </Image>可改寫為<Image/>,稱為空元素
7.XAML中Window的子級(jí)元素僅有一個(gè)
8.命名空間: 避免了元素和屬性的重名問(wèn)題
a)xmlns:digital="http://www.digicam.org命名空間
b)xmlns= "http://www.Aptech_edu.ac下的元素
c)命名空間是一種邏輯位置,相當(dāng)于URI的作用,不是物理位置.
b)XML結(jié)構(gòu)Schema與XAML
i.在XML體系中,分三部分(XML數(shù)據(jù)+DTD/Schema結(jié)構(gòu)+XSL/XSLT樣式),在XAML中,數(shù)據(jù)與結(jié)構(gòu)是合并在一起。
ii.XAML中元素的結(jié)構(gòu)是比較固定的,數(shù)據(jù)穿插在結(jié)構(gòu)內(nèi)部,作為元素的一部分
iii.XAML是遵循Schema結(jié)構(gòu)的
c)Dom文檔結(jié)構(gòu)
i.XML文檔被編譯器解釋時(shí),將轉(zhuǎn)化為樹模型,XAML中同理
ii.查看文檔大綱可查看XAML中元素樹的結(jié)構(gòu)
d)XAML分析
i.XAML語(yǔ)言與XML語(yǔ)言的關(guān)系。
XAML是XML的子集,XAML中,元素結(jié)構(gòu)也是由Schema決定
ii.XAML語(yǔ)言與代碼后置
iii.XAML文檔樹
iv.x命名空間
(x:Class, x:Name, x:Key, x:Shared,x:Type,x:Static,x:Array, x:Null)
v.XAML瀏覽器應(yīng)用程序XBAP?
vi.WPF的結(jié)構(gòu)文件 Schema位置:
C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas\wpfe.xsd
C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas\xaml2006.xsd
vii.Xsd分析
1.元素類型
a)復(fù)合類型: <xs:complexType>有從屬的子元素
b)簡(jiǎn)單類型: <xs:simpleType>,沒有從屬的子元素
2.數(shù)據(jù)類型
a)元素<xs:element>
b)屬性<xs:Attribute>
3.Xsd片段分析
a)這里定義了元素Image的子元素和屬性的結(jié)構(gòu)
?
5、WPF輸入輸出、焦點(diǎn)行為
a)鍵盤類和鍵盤事件
b)鼠標(biāo)類和鼠標(biāo)事件
c)焦點(diǎn)行為處理(鍵盤焦點(diǎn)、邏輯焦點(diǎn)、鍵盤導(dǎo)航)
?
6、WPF容器、布局
a)StackPanel、WrapPanel、DockPanel?
i.StackPanel:堆疊布局,可選擇橫向或縱向的排列循序
ii.WrapPanel:流式布局
iii.DockPanel:方位布局
b)Grid、 UniformGrid
a)Grid:表格布局,多行多列結(jié)構(gòu),可實(shí)現(xiàn)跨行或跨列
?
7、WPF控件模型
1.ContentControl 模型:具有 Content屬性
a)Content中元素可以是數(shù)據(jù),也可以是子元素,注意子元素是單個(gè)元素
參閱C12中Demo01.xaml
b)ContentControl繼承關(guān)系: 參閱C12中Demo01.xaml
c)控件詳解:
1)Button元素: 參閱C12中Demo02.xaml
2.HeaderedContentControl 模型
3.ItemsControl模型
4.HeaderedItemsControl 模型
?
8、WPF內(nèi)容模型
1.Panel內(nèi)容模型
2.Decorator內(nèi)容模型?
3.TextBlock模型
4.Text模型
?
9、WPF數(shù)據(jù)綁定
5.綁定源與綁定目的區(qū)分
6.綁定源的分類,綁定語(yǔ)法
7.數(shù)據(jù)模板
8.WPF綁定ADO.NET數(shù)據(jù)源
9.WPF綁定到LINQ
?