




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、文章由情難枕精心整理,希望對(duì)大家的學(xué)習(xí)和工作帶來(lái)幫助WPF入門(mén)指南一:快速入門(mén)【IT168技術(shù)文檔】 摘要:WPF是微軟推出的基于Windows Vista的用戶界面框架,屬于.NET Framework 3.0的一部分。本文旨在通過(guò)一些簡(jiǎn)單的示例,讓你對(duì)WPF有一個(gè)概要的認(rèn)識(shí)。 主要內(nèi)容 1概述 2WPF的組成 3WPF的編程架構(gòu) 4XAML 5WPF中的控件集 一概述 WPF (Windows Presentation Foundation)是微軟推出的基于Windows Vista的用戶界面框架,屬于.NET Framework 3.0的一部分。它提供了統(tǒng)一的編程模型、語(yǔ)言和
2、框架,真正做到了分離界面設(shè)計(jì)人員與開(kāi)發(fā)人員的工作;同時(shí)它提供了全新的多媒體交互用戶圖形界面。 二WPF的組成 WPF的構(gòu)成組件如下所示,其中PresentationFramework、PresentationCore、milcore三部分是WPF的核心組件: 三WPF的編程架構(gòu) WPF整體的編程架構(gòu)如圖2所示,可以看到,它其中包含了文檔服務(wù)、用戶界面服務(wù)、多媒體服務(wù)以及一些其它的基本服務(wù)。在用戶界面服務(wù)中,提供了應(yīng)用程序 服務(wù)、部署服務(wù)、控件集、布局以及數(shù)據(jù)綁定等;在多媒體服務(wù)中可以看到WPF幾乎可以處理所有的媒
3、體類(lèi)型,包括圖片、音頻、視頻、動(dòng)畫(huà)、2D、3D、文本 等。 四XAML 在WPF中提供了兩種API,一種是用于普通編程的API,比如我們可以用C#、VB.NET等 語(yǔ)言進(jìn)行編程,另一種是基于XML的API,稱(chēng)為XAML(Extensible Application Markup Language),引入XAML使得UI代碼和應(yīng)用程序邏輯代碼完全分離,它是一種標(biāo)記語(yǔ)言,支持聲明式編程,由于XAML是基于XML的,所以它擁有 XML的所有規(guī)則和定義,非常容易進(jìn)行擴(kuò)展??聪旅鎯啥魏?jiǎn)單的代碼: XAML代碼: <Button Name="bt1" Background=&qu
4、ot;Blue" Foreground="Red"> This is a button</Button>C#代碼:Button btn1 = new Button();btn1.Content = "This is a button"btn1.Background = Brushes.Blue;btn1.Foreground = Brushes.Red;五WPF控件集 在WPF中,提供了非常豐富的控件集,如表一所示: 分類(lèi)
5、60; 控件 Editing
6、0; CheckBox, ComboBox, PasswordBox, RadioButton, RichTextBox, Slider, TextBox List
7、160; Selection ListBox, ListView, TreeView User Information Label,
8、 ProgressBar, Popup, ToolTip Action Button, ContextMenu, Menu, Separator, StatusBar, Thumb, ToolBar Appearance
9、60; Border, BulletDecorator, Decorator, Image, Viewbox Dialog boxes OpenFileDialog, PrintDialog, SaveFileDialog Containers Expander, GroupBox, R
10、epeatButton, ScrollBar, ScrollViewer, TabControl Layout Canvas, DockPanel, Grid, GridSplitter, Panel, StackPanel, VirtualizingStackPanel, WrapPanel
11、160; Navigation Frame, Hyperlink Documents DocumentViewer, FlowDocumentPageViewer, FlowDoc
12、umentReader, FlowDocumentScrollViewer 以上只是對(duì)WPF作一個(gè)概要的介紹,在后面的文章中,我會(huì)詳細(xì)的去講WPF中一些控件的用法數(shù)據(jù)綁定、資源處理、樣式與模版、文檔編程、多媒體編程等內(nèi)容。WPF開(kāi)發(fā)簡(jiǎn)介【IT168技術(shù)文檔】 要贏得世界,必須在恰當(dāng)?shù)臅r(shí)間做出恰當(dāng)?shù)氖?。這一點(diǎn),微軟做到了。歷經(jīng)微軟DOS,Win 31, Win95, Win 98, Win 2k, WinXP, 一路走來(lái),一次比一次熱鬧,一個(gè)比一個(gè)精彩、炫麗。Vista的宣傳更是轟轟烈烈,喧囂日上。Microsoft總是有能力在恰當(dāng)?shù)臅r(shí)間制造出意料中的轟 動(dòng),
13、Vista一經(jīng)推出便讓IT業(yè)界趨之若鶩。 一、掀起你的蓋頭來(lái),讓我看看你的臉.NET Framework 3.0 與微軟對(duì)Vista鑼鼓宣天的推廣相比,對(duì)與之相伴的.NET Framework 3.0卻顯得非常低調(diào)。微軟沒(méi)將它作為宣傳重點(diǎn)。所有的幕后英雄總是默默無(wú)聞。對(duì)普通用戶而言,他們不關(guān)心舞臺(tái)背后的一切,它們更關(guān)心的是前臺(tái)的表現(xiàn),是 那種炫麗奢華的感覺(jué)。真正熱捧幕后英雄的,也是我們這群在幕后默默耕耘的程序員們。我們對(duì).NET Framework 3.0有種自然而然的親切感,因?yàn)槲覀儗⒃诖思軜?gòu)上為Vista編寫(xiě)各種程
14、序。 作為微軟精心打造的新一代.NET架構(gòu),.NET Framework 3.0在Vista時(shí)代擔(dān)當(dāng)最主要的應(yīng)用程序接口。.NET曾被微軟寄予厚望和重托,比爾·蓋茨先生欲用之來(lái)實(shí)現(xiàn)一統(tǒng)江湖之志。事實(shí)證明,微軟對(duì).Net 的推出是成功。越來(lái)越多的應(yīng)用程序開(kāi)發(fā)者已從Win32和JAVA架構(gòu)轉(zhuǎn)向.NET開(kāi)發(fā),越來(lái)越多的網(wǎng)站開(kāi)發(fā)人員愛(ài)上了。這讓微軟看到了希 望,他們躊躇滿志,他們加緊了對(duì).NET的研發(fā),升級(jí)速度越來(lái)越快,.NET Framework 3.0就是微軟在.NET Framework 2.0后最重要的升級(jí)。甚至有人驚呼,我們象劉翔一樣地飛奔也跟
15、不上微軟的速度! 到了.NET Framework 3.0,.NET令程序員更稱(chēng)心、并逐漸“傾心”。在眾多的開(kāi)發(fā)環(huán)境,微軟的開(kāi)發(fā)系列產(chǎn)品,讓它在與其它架構(gòu)的較量中逐漸搶得上風(fēng)而獨(dú)在鰲頭。 Vista集成.NET Framework 3.0,可謂珠聯(lián)璧合??梢赃@么講,沒(méi)有.Net Framework 3.0這個(gè)幕后英雄,Vista會(huì)黯淡很多。 .NET Framework 3.0(原代號(hào)“WinFX”),它構(gòu)建于.NET Framework 2.0之上,同時(shí)新增了四個(gè)大組件:Wind
16、ows Presentation Foundation(WPF),Windows Workflow Foundation(WWF)、Windows Communication Foundation(WCF)和Windows CardSpace,而這些恰是NET Framework 3.0最具價(jià)值的部分。 其中,最令人矚目的是WPF(原來(lái)代號(hào)為“Avalon”),它是微軟全新的圖形界面引擎,為各種應(yīng)用提供統(tǒng)一的界面技術(shù)。程序員在WPF的幫助下,要開(kāi) 發(fā)出媲美Mac程序的酷炫界面已不再是遙不可及的奢望。Windows Workflow Foundation用于
17、開(kāi)發(fā)基于工作流的應(yīng)用程序;Windows Communication Foundation則用于開(kāi)發(fā)面向服務(wù)的應(yīng)用程序,它是新一代通訊和網(wǎng)絡(luò)開(kāi)發(fā)框架,為不同類(lèi)型的網(wǎng)絡(luò)應(yīng)用程序提供了一個(gè)通用的編程模型,尤其是包含其中 的PeerChannel模塊,以難以置信的方式消除了開(kāi)發(fā)P2P應(yīng)用程序的復(fù)雜性和困難度;而Windows CardSpace提供數(shù)字標(biāo)志用戶控件。如果把這些林林總總小巧精美的產(chǎn)品比做是珍珠的話,那么,需要一根金線將這些珍珠串起來(lái),珍珠才更有價(jià)值,珍珠 才熠熠生輝。而串起這顆珍珠的金線,就是.NET Framework 3.0。 二、搭建Vist
18、a程序的開(kāi)發(fā)環(huán)境 1. 如果你使用的是Vista操作系統(tǒng),那么,由于Vista已集成了.NET Framework 3.0,所以不必再單獨(dú)安裝.NET Framework 3.0。但是,如果你是Windows XP或Windows 2003下開(kāi)發(fā),則必須安裝.NET Framework 3.0。 2. 要開(kāi)發(fā)Vista應(yīng)用程序,則必須有Vista SDK開(kāi)發(fā)包的支持。Windows SDK for Windows Vista and .NET Framework 3.0包含了大量庫(kù)文件、頭文件、文檔、示例和工具。由于V
19、ista操作系統(tǒng)的推出時(shí)間比Visual Studio 2005開(kāi)發(fā)工具要晚,因此,針對(duì)Windows Vista開(kāi)發(fā)的Windows SDK和.NET Framework 3.0并未集成到Visual Studio 2005中。因此,必須下載此SDK,個(gè)頭不?。ó?dāng)前最新版本是1.15GB),下載和安裝時(shí)需要你足夠的耐心和毅力,相信這個(gè)對(duì)于我們這些一向好脾氣的 程序員產(chǎn)不在話下。 3. 安裝Visual Studio 2005(中/英文版均可,建議你習(xí)慣使用英文版,因?yàn)樗邪姹径际怯⑽陌娴氖紫韧斗攀袌?chǎng),而英文版到中文版,現(xiàn)實(shí)有三個(gè)月以上的時(shí)間差,而對(duì)于我們
20、這些 母語(yǔ)非英語(yǔ)的開(kāi)發(fā)人員,英語(yǔ)關(guān)是一個(gè)必須跨越的檻,緣引魯迅老先生的名言改編一下:世界并沒(méi)有自己熟悉的路,走得多了,也就熟了路!英文看得多了,自然也 就熟悉了)。 4. 下載并安裝Visual Studio 2005 SP1,Visual Studio 2005 SP1 Update for Windows Vista。Visual Studio 2005 SP1修補(bǔ)Visual Studio 2005許多錯(cuò)誤,并增強(qiáng)了一些性能,由于該補(bǔ)丁包要對(duì)Visual Studio 2005和Vista進(jìn)行詳細(xì)檢測(cè),安裝比較耗時(shí)。
21、0; 5.為了方便程序員開(kāi)發(fā).NET Framework 3.0下的新型應(yīng)用,微軟還推出了VS 2005 Extensions for .NET Framework 3.0(Workflow)和VS 2005 Extensions for .NET Framework 3.0(WCF&WPF)擴(kuò)展組件,為Visual Studio 2005提供開(kāi)發(fā)Windows Workflow Foundation、Windows Communication Foundation和Windows Presentation Foundation類(lèi)型應(yīng)用程序的模版。
22、 6. 如果要學(xué)WPF,特別建議你安裝Expression Blend(目前版本是Expression Blend 2 Agust Preview版)。這樣,你可以在vs2005新建一個(gè)WPF項(xiàng)目,然后用Blend打開(kāi)此項(xiàng)目,在Blend中對(duì)它進(jìn)行界面設(shè)計(jì)和美化等工作,然后再 轉(zhuǎn)到vs2005下進(jìn)行程序編碼(兩個(gè)程序之間支持來(lái)回切換)。 三、WPF簡(jiǎn)介 Windows Presentation Foundation(WPF)是微軟新一代圖形系統(tǒng),運(yùn)行在.NET Framework 3.0架構(gòu)下,為用戶界面、2D/3D 圖形、文檔和媒體提供了統(tǒng)一的描述和操作
23、方法?;贒irectX 9/10技術(shù)的WPF不僅帶來(lái)了前所未有的3D界面,而且其圖形向量渲染引擎也大大改進(jìn)了傳統(tǒng)的2D界面,比如Vista中的半透明效果的窗體等都得益于 WPF。微軟還提供了專(zhuān)門(mén)的界面開(kāi)發(fā)語(yǔ)言XAML(eXtensible Application Markup Language,可擴(kuò)展應(yīng)用程序標(biāo)記語(yǔ)言),使得界面描述代碼和程序代碼得以分開(kāi),從而提高了開(kāi)發(fā)效率并有利于團(tuán)隊(duì)開(kāi)發(fā)。 XAML是微軟為構(gòu)建下一代應(yīng)用程序界面而創(chuàng)建的一種新的基于XML的描述性語(yǔ)言,它可對(duì)WPF程序的所有界面元素進(jìn)行定制,從而構(gòu)成具有WPF風(fēng)格的界 面,并最終形成一個(gè)
24、組織良好的XML文檔。由于它最新會(huì)被編譯成.Net后臺(tái)代碼,因此它能夠同后臺(tái)進(jìn)行邏輯處理的.NET語(yǔ)言如C#、J#、C+、 VB等協(xié)同工作,其工作性質(zhì)類(lèi)似于ASP.NET中的HTML。同HTML一樣,XAML既可以直接編碼,也可以由專(zhuān)門(mén)的工具生成。目前最好的XAML編 輯器就是上面我建議你安裝的Expression Blend了,但你也可以使用Windows SDK for Windows Vista中的XAMLPad,但功能卻顯得非常簡(jiǎn)單。 實(shí)際上,大多數(shù)WPF程序?qū)⑼瑫r(shí)包含XAML代碼和程序代碼,首先使用XAML定義程序界面,然后再用.NET語(yǔ)言編寫(xiě)相
25、應(yīng)的邏輯代碼。跟ASP.NET 類(lèi)似,邏輯代碼既可以直接嵌入XAML文件中,也可以將它保存為獨(dú)立的代碼文件。盡管XAML并非設(shè)計(jì)WPF程序所必須,按照傳統(tǒng)方式使用程序代碼來(lái)實(shí)現(xiàn) 界面依然有效,但是如果使用XAML,界面設(shè)計(jì)和邏輯設(shè)計(jì)可以完全分離,不但使程序的開(kāi)發(fā)和維護(hù)更加方便,而且在團(tuán)隊(duì)開(kāi)發(fā)中,可以使程序員專(zhuān)注于業(yè)務(wù)邏輯 的實(shí)現(xiàn),而將界面設(shè)計(jì)交由專(zhuān)業(yè)人員來(lái)完成,從而使各類(lèi)人員在項(xiàng)目中各盡其能各展其長(zhǎng),開(kāi)發(fā)出功能強(qiáng)大、界面一流的WPF程序。WPF指南之XAML概述【IT168 技術(shù)文檔】 在我開(kāi)始看WPF文檔開(kāi)始的幾天里,腦子里形成了一種錯(cuò)誤的想法:WPF不就
26、是XAML碼?當(dāng)時(shí)的感覺(jué)就是郁悶啦,我學(xué)習(xí)WPF還得弄這個(gè)東西。給人的第一感覺(jué)就是WPF很復(fù)雜。雖然對(duì)WPF的熟悉和了解還不是特別多,但現(xiàn)在已經(jīng)知道這確實(shí)是一種錯(cuò)誤的想法。 Charles Petzold先生曾有一篇文章介紹了WPF、XAML的一些關(guān)系(The Two APIs)。文章中說(shuō)明了WPF為什么很復(fù)雜:因?yàn)閃PF有兩套API,一套用于普通的編碼訪問(wèn)(比如C#、VB.NET等其中.NET支持的語(yǔ)言。而另 外一套就是基于XML的API,被稱(chēng)為XAML(Extensible Application Markup Language)。
27、60; XAML實(shí)現(xiàn)UI代碼和應(yīng)用程序邏輯代碼的分離。在.NET 3.0和Windows Vista中,XAML與WPF一起建立整個(gè)的UI。由于XAML是基于XML的,所以每個(gè)XAML代碼都肯定是一個(gè)完整的XML文件。XAML繼承了 XML所有的定義和規(guī)則。XAML與其他XML擴(kuò)展不同之處就是他所表示的意義。每個(gè)XAML元素是一個(gè).NET CLR類(lèi)?;赬ML使得我們非常容易擴(kuò)展和操作XAML。利用XAML的WPF這種關(guān)系,開(kāi)發(fā)人員可以單獨(dú)的設(shè)計(jì)漂亮的UI,也許真正的美工會(huì)更多的出 現(xiàn)。我們可以把程序邏輯寫(xiě)在單獨(dú)的文件或者是內(nèi)聯(lián)嵌入到XML文件。
28、; 在XAML中使用得最多的XML功能應(yīng)該有三個(gè):命名空間、屬性和子元素。 先看一個(gè)簡(jiǎn)單的XAML的例子: <Window x:Class="FirstXAML.Window1"xmlns="xmlns:x="Title="FirstXAML" Height="200" Width="300"><Canvas></Canvas></Window> 其中的xmlns就是XML
29、中的名字空間,在W3C中xmlns是如下定義的: XML namespaces provide a simple method for qualifying element and attribute names used in Extensible Markup Language documents by associating them with namespaces identified by URI references. 簡(jiǎn)單地說(shuō)就是xmlns提供了一種方法把URI引用的名字空間定義為當(dāng)前XML文件的元素和屬
30、性的默認(rèn)命名空間。這里表示當(dāng)前這個(gè)XML文檔,也就是我們的XAML文件,它的默認(rèn)的命名空間就是 然后是屬性和子元素,XML對(duì)屬性的表示除了可以用Property外,還可以用子元素,在XAML中也是如此,看一個(gè)簡(jiǎn)單的例子:<Button Width="6"><Button.Background>White</Button.Background></Button> 例子當(dāng)中就使用了屬性和子元素兩種方式來(lái)指定屬性。其中的Width是直接用屬性表示
31、,Background屬性是用子元素表示。在多數(shù)時(shí)候,但不是所有,你可以自由選擇這兩種表示方式之一。 XAML被編譯為BAML(Binary Application Markup Language)文件。通常,BAML文件比XAML更小,編譯后的BAML都是Pre-tokenized的,這樣在運(yùn)行時(shí)能更快速的加載、分析 XAML等等。這些BAML文件被以資源的形式嵌入到Assembly當(dāng)中。同時(shí)生成相應(yīng)的代碼(文件名稱(chēng)是*.g.cs或者*.g.vb),這些代 碼根據(jù)XAML元素分別生成命名的 Attribute字段。以及加載BAML的構(gòu)造函數(shù)。
32、; 最后,關(guān)于XAML的優(yōu)點(diǎn),我附上一點(diǎn)翻譯過(guò)來(lái)的條款,可能更直觀。 XAML除了有標(biāo)記語(yǔ)言、XML的優(yōu)點(diǎn)外,還有如下一些優(yōu)點(diǎn): 用XAML設(shè)計(jì)UI更簡(jiǎn)單 XAML比其他的UI設(shè)計(jì)技術(shù)所需編碼更少。 XAML設(shè)計(jì)的UI方便轉(zhuǎn)移、方便在其他環(huán)境提交。比如在Web或Windows Client。 用XAML設(shè)計(jì)動(dòng)態(tài)UI非常容易 XAML給UI設(shè)計(jì)人員帶
33、來(lái)新的革命,現(xiàn)在所有的設(shè)計(jì)人員不再需要.NET開(kāi)發(fā)的知識(shí)同樣可以設(shè)計(jì)UI。在不遠(yuǎn)的將來(lái),終端用戶可以看到更漂亮的UI。 WPF指南之WPF的結(jié)構(gòu)【IT168技術(shù)文檔】 WPF進(jìn)入我們的生活已經(jīng)有一段時(shí)間。個(gè)人認(rèn)為在UI的實(shí)踐中,用戶需要的是易于操作的,更加絢麗的界面。這兩個(gè)應(yīng)該是最基本、也是最重要的宗旨。而對(duì)于 開(kāi)發(fā)人員就是要用最簡(jiǎn)單的方法開(kāi)發(fā)出盡可能漂亮的界面,并且效率也不能太差。除了在一些Web開(kāi)發(fā)和特殊的應(yīng)用中,很少有開(kāi)發(fā)組配備單獨(dú)的美工,至少目前 是這樣吧!根據(jù)自己目前對(duì)WPF的了解程度,感覺(jué)WPF在其中某些方面確實(shí)有超強(qiáng)的震撼力。
34、160; 客觀上講,Vista操作系統(tǒng)確實(shí)給我們帶來(lái)了無(wú)可比擬的視覺(jué)效果。我自己深有體會(huì),在近2個(gè)月的時(shí)間里每天都是在Vista下的開(kāi)發(fā),回家后看到XP系統(tǒng),始終有些不爽的感覺(jué)。 WPF可以認(rèn)為是MS利用原有.NET框架的一些特色,加上DirextX的產(chǎn)物。從下圖的WPF組件中,我們可以看出最底層仍然是一些內(nèi)核API。(以下兩張圖片都來(lái)自互聯(lián)網(wǎng)。) 其中紅色顯示的組件是WPF的核心。Milcore是一個(gè)和DirectX交互的非托管組件,非托管代碼能帶給我們更高效的處理,能更好的和 DirextX交互。WPF
35、的所有顯示都是由Dirext完成的。milcore中一個(gè)非常重要的功能就是Composition引擎,這個(gè)引擎對(duì)效率的 要求很高,它的具體作用稍后介紹。所以milcore放棄了一些CLR的特征來(lái)?yè)Q取效率。而另外兩個(gè)紅色的組件都是建立在CLR基礎(chǔ)之上,利用了.NET 的優(yōu)勢(shì)。 至于其中的User32組件有什么作用,偶目前的知道的就是在WPF的某些應(yīng)用場(chǎng)景中為了某些兼容需要使用User32,其中就有DWM(桌面窗口管理)。DWM的內(nèi)容又可以寫(xiě)上一大堆,感興趣的朋友可以看SDK文檔。 我們除了關(guān)心WPF的基本結(jié)構(gòu)外,更重要的
36、 是WPF提供了什么功能,請(qǐng)看下圖: 圖中的每個(gè)黃色塊都是一種媒體類(lèi)型。這就表示W(wǎng)PF可以處理幾乎所有的媒體類(lèi)型:位圖、3D、音頻、視頻和文本等等。通過(guò)WPF,它集成了現(xiàn)在的 GDI/GDI+、D3D/OPENGL以及多媒體的DSHOW等等。所有的東西都是等同對(duì)象,不管的3D還是2D,或者文本。 結(jié)構(gòu)圖中的Animate塊貫串了整個(gè)的結(jié)構(gòu),因?yàn)樵赪PF中我們可以對(duì)所有的可視內(nèi)容進(jìn)行動(dòng)畫(huà)操作。這是非常讓人期待的功能。Animate下面我們?cè)?次看到了Composition引擎,前面提到過(guò)它是位于milcore組件中。開(kāi)發(fā)
37、過(guò)程中,我們的界面元素功能有多種,比如圖片,視頻等等,最后顯示到 窗口的內(nèi)容可以認(rèn)為只是一張圖片(準(zhǔn)確說(shuō)是Surface)。這個(gè)引擎的作用就是合成這些圖片和視頻元素最后進(jìn)行提交顯示。 WPF的數(shù)據(jù)處理【IT168 技術(shù)文檔】 數(shù)據(jù)綁定,這是WPF提 供的一個(gè)真正的優(yōu)點(diǎn)。除了可以用在傳統(tǒng)的綁定環(huán)境中,數(shù)據(jù)綁定已經(jīng)被擴(kuò)展應(yīng)用到控件屬性上。學(xué)習(xí)應(yīng)用數(shù)據(jù)綁定,也能真正的體現(xiàn)XAML的好處。到底什么是 數(shù)據(jù)綁定呢?也許你從字面上已經(jīng)理解的很不錯(cuò)了。通過(guò)數(shù)據(jù)綁定,我們?cè)趹?yīng)用程序UI和程序邏輯之間建立了一種聯(lián)系。正常建立綁定后,在數(shù)據(jù)的值發(fā)生改變 后,綁定到數(shù)據(jù)的元素將自
38、動(dòng)更新、體現(xiàn)出數(shù)據(jù)的變化。 同樣,我們先看幾個(gè)相關(guān)的知識(shí)點(diǎn): 1、DataContext屬性。設(shè)置DataContext屬性,其實(shí)就是指定數(shù)據(jù)上下文。那么數(shù)據(jù)上下文又是什么呢?又是一個(gè)新的概念:數(shù)據(jù)上下文允 許元素從它的父元素繼承數(shù)據(jù)綁定的數(shù)據(jù)源。很簡(jiǎn)單,在某個(gè)元素的DataContext中指定的值,那么在這個(gè)元素的子元素也可以使用。注意,如果我們修 改了FrameworkElement或者FrameworkContentElement元素的DataContext屬性,那么元素將不再繼承 DataContext值。也就
39、是說(shuō)新設(shè)置的屬性值將覆蓋父元素的設(shè)置。如何設(shè)置DataContext屬性,稍后說(shuō)明。 2、數(shù)據(jù)源的種類(lèi)。也許,WPF提供的數(shù)據(jù)綁定只是實(shí)現(xiàn)了一項(xiàng)普通的功能而已,但是,WPF中所支持的多種數(shù)據(jù)源使得它的數(shù)據(jù)綁定功能將更加強(qiáng)大。現(xiàn)在,WPF支持如下四種綁定源: (1)、任意的CLR對(duì)象:數(shù)據(jù)源可以是CLR對(duì)象的屬性、子屬性以及Indexers。對(duì)于這種類(lèi)型的綁定源,WPF采用兩種方式來(lái)獲取屬性值:A)、 反射(Reflection);B)、CustomTypeDescriptor,如果對(duì)象實(shí)現(xiàn)了ICustomTypeDes
40、criptor,綁定將使 用這個(gè)接口來(lái)獲取屬性值。 (2)、XML結(jié)點(diǎn):數(shù)據(jù)源可以是XML文件片斷。也可以是XMLDataProvider提供的整個(gè)XML文件。 (3)、ADO.NET數(shù)據(jù)表。我對(duì)ADO.NET的了解不夠,在此不做過(guò)多評(píng)論。 (4)、Dependency對(duì)象。綁定源可以是其它DependencyObject的DependencyProperty屬性。 3、數(shù)據(jù)綁定的方式:(1)、OneWay,單一方向的綁定,只有在數(shù)據(jù)源發(fā)生變化
41、后才會(huì)更新綁定目標(biāo)。(2)、TwoWay,雙向綁定,綁定的兩端任何 一端發(fā)生變化,都將通知另一端。(3)、OneTime,只綁定一次。綁定完成后任何一端的變化都不會(huì)通知對(duì)方。 在上面的第二點(diǎn)我介紹了數(shù)據(jù)源的種類(lèi),注意這里的概念和下面要說(shuō)明的指定數(shù)據(jù)源的方式的區(qū)別。目前,指定數(shù)據(jù)源有三種方式,我們可以通過(guò)任何一種方式來(lái)指定上述的任何一種數(shù)據(jù)源: (1)、通過(guò)Source標(biāo)記。我們可以在使用Binding使用Source標(biāo)記顯式指定數(shù)據(jù)源。 (2)、通過(guò)ElementName標(biāo)記。這個(gè)
42、ElementName指定了一個(gè)已知的對(duì)象名稱(chēng),將使用它作為綁定數(shù)據(jù)源。 (3)、通過(guò)RelativeRource標(biāo)記。這個(gè)標(biāo)記將在后面說(shuō)明ControlTemplate和Style時(shí)再進(jìn)行說(shuō)明。 現(xiàn)在我們說(shuō)明了很多和數(shù)據(jù)源相關(guān)的內(nèi)容。但是再綁定的時(shí)候,我們還需要指定綁定對(duì)象的屬性名稱(chēng)。所以WPT提供了一個(gè)Path標(biāo)記。它被用來(lái)指定數(shù)據(jù)源的屬性。也即是數(shù)據(jù)源將在數(shù)據(jù)源對(duì)象的Path所指定的屬性上尋找屬性值。 在介紹WPF數(shù)據(jù)綁定源的種類(lèi)時(shí),第一種就是任意的CLR對(duì)象。這里需要注意的是WPF雖然支持任意的C
43、LR對(duì)象,但是一個(gè)普通的CLR對(duì)象類(lèi)卻不行。我們還需要在CLR對(duì)象類(lèi)上實(shí)現(xiàn)一種變化通知機(jī)制。 WPF把這種通知機(jī)制封裝在了INotifyPropertyChanged接口當(dāng)中。我們的CLR對(duì)象類(lèi)只要實(shí)現(xiàn)了這個(gè)接口,它就具有了通知客戶的能力,通常是在屬性改變后通知綁定的目標(biāo)。 下面是一個(gè)簡(jiǎn)單的例子,實(shí)現(xiàn)了一個(gè)支持通知功能的Camera類(lèi): using System;using System.ComponentModel;using System.Windows.Media.Media3D;namespace LYLTES
44、Tpublic class Camera : INotifyPropertyChangedprivate PerspectiveCamera m_Camera;public event PropertyChangedEventHandler PropertyChanged;public Camera()m_Camera = new PerspectiveCamera();private void NotifyPropertyChanged(String info)if (PropertyChanged != null)PropertyChanged(this, new PropertyChan
45、gedEventArgs(info);public PerspectiveCamera CameraPropget return m_Camera; setif (value != m_Camera)this.m_Camera = value;NotifyPropertyChanged("CameraProp"); 這一段代碼很簡(jiǎn)單,首先引入類(lèi)中使用的INotifyPropertyChanged和PerspectiveCamera需要的名字空間。這里與普通 CLR類(lèi)的區(qū)別在于首先有一個(gè)公有的PropertyChangedEventHan
46、dler事件類(lèi)型。然后我們?cè)?NET屬性包裝CameraProp 判斷屬性是否發(fā)生了變化,如果是,則用當(dāng)前是屬性名稱(chēng)字符串“CameraProp”調(diào)用另一個(gè)私有函數(shù)NotifyPropertyChanged。由 它根據(jù)屬性的名稱(chēng)構(gòu)造一個(gè)PropertyChangedEventArgs對(duì)象,并完成對(duì)PropertyChanged的調(diào)用。它才是屬性變化時(shí)真正 應(yīng)該調(diào)用的一個(gè)通知事件。 最后一點(diǎn),如果我們需要通知所以的屬性都發(fā)生了變化,則將上面的屬性字符串“CameraProp”用參數(shù)NULL替代即可。 前面講過(guò),通過(guò)實(shí)現(xiàn)INotifyPropert
47、yChanged,我們可以改變使任意的CLR對(duì)象支持WPF的綁定源。但是, INotifyPropertyChanged通常只應(yīng)用在單個(gè)的類(lèi)屬性上。在現(xiàn)實(shí)應(yīng)用中,我們還會(huì)遇到另外一種情況:我們需要監(jiān)視某一堆的數(shù)據(jù)是否發(fā)生 變化。也就是說(shuō)我們綁定的數(shù)據(jù)源不再是一個(gè)單獨(dú)數(shù)據(jù)對(duì)象。比如,綁定源是一個(gè)數(shù)據(jù)表時(shí),我們希望在表中任何一條數(shù)據(jù)發(fā)生變化就能得到通知。(這里暫不考慮 WPF綁定對(duì)ADO.NET的支持。) WPF提供了一個(gè)ObservableCollection類(lèi),它實(shí)現(xiàn)了一個(gè)暴露了INotifyPropertyChanged的數(shù)據(jù)集合。也就是說(shuō)我 們不需要自
48、己對(duì)每個(gè)單獨(dú)的數(shù)據(jù)實(shí)現(xiàn)INotifyPropertyChanged結(jié)構(gòu)。我們先看看如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的綁定數(shù)據(jù)集合。namespace NSLYLpublic class LYLDataObjpublic LYLDataObj(string name, string description) = name;this.description = description;public string Nameget return name; set name = value; public string Descriptionget return description; set d
49、escription = value; private string name;private string description;public class LYLDataObjCol : ObservableCollection<LYLDataObj>public LYLDataObjCol()this.Add(new LYLDataObj("Microsot", "Operating System");this.Add(new LYLDataObj("Google", "Search"); 代碼很
50、簡(jiǎn)單,基本上就是這樣的一個(gè)模板。然后,我們就可以把LYLDataObjCol綁定到一個(gè)需要多項(xiàng)數(shù)據(jù)的Element之上,比如ListBox、ComboBox等等。<ListBox ItemsSource="StaticResource dataObj" ./> 綁定之后,只要我的LYLDataObjCol對(duì)象發(fā)送了變化,ListBox、ComboBox的數(shù)據(jù)也會(huì)有對(duì)應(yīng)的變化。 到現(xiàn)在,我們已經(jīng)知道在綁定的時(shí)候有兩種指定數(shù)據(jù)源的方式:1、DataContext,關(guān)于它我們?cè)谶@個(gè)Post有簡(jiǎn)單介紹。2、直
51、接用Binding 類(lèi)的Source屬性。那么,我們?cè)谑褂玫臅r(shí)候如何區(qū)別呢?首先,Source的優(yōu)先級(jí)比DataContext高,只有Source不存在,或者在當(dāng)前 Source到不到需要的屬性時(shí)才會(huì)查找DataContext。除此之外,這兩者沒(méi)有真正的區(qū)別,只是建議使用Source,它能有助于我們調(diào)試應(yīng)用程 序。因?yàn)橥ㄟ^(guò)它可以明確的得到Source的信息。而DataContext支持一種繼承。可以在父Element指定Source源。這同時(shí)也成為了 DataContext的一個(gè)優(yōu)點(diǎn):如果多個(gè)Element需要綁定同一個(gè)Source源,那么我們只需要在一個(gè)地方指定DataContext,就可以
52、 在其子Element使用。WPF中的命令簡(jiǎn)述【IT168技術(shù)文檔】 在我們?nèi)粘5膽?yīng)用程序操作中,經(jīng)常要處理各種各樣的命令和進(jìn)行相關(guān)的事件處理,比如需要復(fù)制、粘貼文本框中的內(nèi)容;上網(wǎng)查看網(wǎng)頁(yè)時(shí),可能需要返回上一網(wǎng)頁(yè) 查看相應(yīng)內(nèi)容;而當(dāng)我們播放視頻和多媒體時(shí),我們可能要調(diào)節(jié)音量,快速拖動(dòng)到我們想看的片段等等。在Winform編程中,我們經(jīng)常使用各種各樣的控件來(lái) 解決此類(lèi)問(wèn)題,當(dāng)然我們也必須編寫(xiě)一堆代碼來(lái)處理各種各樣的命令和事件處理。那么,Windows Presentation Foundation (WPF)作為微軟新一代圖形圖像支援系統(tǒng),它是如
53、何處理這些命令及事件的呢? 在WPF中,許多控件都自動(dòng)集成了固有的命令集。比如文本框TextBox就提供了復(fù)制(Copy),粘貼(Paste),裁切(Cut),撤消(Undo)和重做(Redo)命令等。 WPF提供常用應(yīng)用程序所用的命令集,常用的命令集包括:ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommands和EditingCommands。 ApplicationCommands(應(yīng)用程序命令): CancelPrint:取消打印 Cl
54、ose:關(guān)閉 ContextMenu:上下文菜單 Copy:復(fù)制 CorrectionList: Gets the value that represents the Correction List command. Cut:剪切 Delete:刪除 Find:查找 Help:幫助 New:新建 NotACommand:不是命令,被忽略 Open:打開(kāi) Paste:粘貼 Print:打印 PrintPreview:打印預(yù)覽 Properties:屬性 Redo:重做 Replace:取代 Save:保存 SaveAs:另存為 SelectAll:選擇所有的 Stop:停止 Undo:撤消 Co
55、mponentCommands(組件命令): ExtendSelection:后接Down/Left/Right/Up, 比如:ExtendSelectionDown(Shift+Down,Extend Selection Down),ExtendSelectionLeft等 Move:后接Down/Left/Right/Up, 如:MoveDown MoveFocus:后接Down/Forward/Back/Up, 如:MoveFocusDown MoveFocusPage:后接Down/Up,如:MoveFocusPageUp MoveTo:后接End/Home/PageDown/Page
56、Up,比如:MoveToPageDown ScrollByLine ScrollPage:后接Down/Left/Right/Up,比如:ScrollPageLeft SelectTo:End/Home/PageDown/PageUp,比如:SelectToEnd NavigationCommands(導(dǎo)航命令): Browse瀏覽: 后接Back/Forward/Home/Stop, 比如:BrowseBack 縮放顯示:DecreaseZoom, IncreaseZoom, Zoom Favorites(收藏) 頁(yè)面:FirstPage, LastPage, PreviousPage, N
57、extPage,GoToPage NavigateJournal Refresh(刷新) Search(搜索) MediaCommands(多媒體控制命令): Treble高音:DecreaseTreble,IncreaseTreble Bass低音:BoostBass,DecreaseBass,IncreaseBass Channel頻道:ChannelDown,ChannelUp MicrophoneVolume麥克風(fēng)音量調(diào)節(jié):DecreaseMicrophoneVolume,IncreaseMicrophoneVolume,MuteMicrophoneVolume ToggleMicro
58、phoneOnOff:麥克風(fēng)開(kāi)關(guān) Volume音量: DecreaseVolume,IncreaseVolume,MuteVolume Rewind, FastForward(回放,快進(jìn)) Track軌道:PreviousTrack,NextTrack 上一段(節(jié)) Play,Pause,Stop,Record(播放,暫停,停止,錄制) TogglePlayPause Select選擇 EditingCommands(編輯/排版類(lèi)命令): Align對(duì)齊:AlignCenter,AlignJustify,AlignLeft,AlignRight(居中,撐滿,左對(duì)齊,右對(duì)齊) Backspace
59、退格 TabForward,TabBackward(Tab前縮,Tab向后) FontSize字體大小:DecreaseFontSize,IncreaseFontSize Indentation縮排:DecreaseIndentation, IncreaseIndentation Delete刪除: Delete選中部分,DeleteNextWord:刪除后一字,DeletePreviousWord:刪除前一字 EnterLineBreak:換行 EnterParagraphBreak:換段 CorrectSpellingError/IgnoreSpellingError:糾正/忽略拼寫(xiě)錯(cuò)誤
60、MoveUpByLine,MoveDownByLine: 上/下移一行, MoveUpByPage,MoveDownByPage: 上/下移一頁(yè) MoveUpByParagraph,MoveDownByParagraph: 上/下移一段 MoveLeftByCharacter/MoveRightByCharacter:左/右移一字符 MoveLeftByWord/MoveRightByWord 左/右移一詞 MoveToDocumentStart/MoveToDocumentEnd:到文章開(kāi)頭/結(jié)尾 MoveToLineStart/MoveToLineEnd:到一行的開(kāi)頭/結(jié)尾 SelectU
61、pByLine,SelectDownByLine:向上/下選一行 SelectUpByPage,SelectDownByPage:向上/下選一頁(yè) SelectUpByParagraph,SelectDownByParagraph:向上/下選一段 SelectLeftByCharacter,SelectRightByCharacter:向左/右選中一字 SelectLeftByWord,SelectRightByWord:向左/右選中一詞 SelectToDocumentStart,SelectToDocumentEnd: 選中到篇頭/篇尾 SelectToLineStart/SelectToL
62、ineEnd:選中到行首/行尾 ToggleBold, ToggleItalic, ToggleUnderline(加粗,斜體,下劃線) ToggleBullets, ToggleNumbering(列表:加點(diǎn),加數(shù)字) ToggleInsert:插入 ToggleSuperscript,ToggleSubscript(上標(biāo)字,下標(biāo)字)先來(lái)舉一個(gè)簡(jiǎn)單的例子: XAML代碼: <StackPanel> <Menu> <MenuItem Command="ApplicationCommands.Paste" /> </Menu>
63、<TextBox /> </StackPanel> C#代碼: StackPanel mainStackPanel = new StackPanel(); TextBox pasteTextBox = new TextBox(); Menu stackPanelMenu = new Menu(); MenuItem pasteMenuItem = new MenuItem(); stackPanelMenu.Items.Add(pasteMenuItem); mainStackPanel.Children.Add(stackPanelMenu); mainStackPa
64、nel.Children.Add(pasteTextBox); pasteMenuItem.Command = ApplicationCommands.Paste;上面代碼演示了將對(duì)文本框設(shè)置為焦點(diǎn)時(shí),菜單項(xiàng)可用,點(diǎn)擊菜單項(xiàng)時(shí),將執(zhí)行粘貼命令。 下面列出關(guān)于Command的四個(gè)概念和四個(gè)小問(wèn)題: 1、WPF中Command(命令)的四個(gè)概念: (1)命令command:要執(zhí)行的動(dòng)作。 (2)命令源command source:發(fā)出命令的對(duì)象(繼承自ICommandSource)。 (3)命令目標(biāo)command target:執(zhí)行命令的主體 (4)命令綁定command binding:映射命令邏輯的對(duì)象 比 如在上面示例中,粘貼(Paste)就是命令(command), 菜單項(xiàng)(MenuItem)是命令源(command source), 文本框(TextBox)是命令目標(biāo)對(duì)象(command target), 命令綁定到command binding文本框(TextBox)控件上。 提示:WPF中的命令都繼承自ICommand接口。ICommand暴露兩個(gè)方法:Execute方法、 CanExecute方法和一個(gè)事件:CanExecuteChanged。 繼承自ICommandSource的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 口罩交易合同范例
- 廠房簡(jiǎn)化改造合同范例
- 再生廢品回收合同范例
- 變頻器維修合同范例
- 醫(yī)療美容合同范例
- 辦公家具租賃合同范本
- 醫(yī)院行政合同范例
- 雙層玻璃購(gòu)銷(xiāo)合同范例
- 勞動(dòng)合同范例外皮
- 勞動(dòng)變更合同范例
- 招聘與錄用(第3版)課件全套 王麗娟 第1-8章 概述、招聘前的理論準(zhǔn)備工作 -錄用與招聘評(píng)估
- 《中國(guó)鐵路北京局集團(tuán)有限公司營(yíng)業(yè)線施工管理實(shí)施細(xì)則》
- 故障診斷技術(shù)的國(guó)內(nèi)外發(fā)展現(xiàn)狀
- 贛美版小學(xué)六年級(jí)上冊(cè)美術(shù)教案(全冊(cè))
- 超長(zhǎng)期特別國(guó)債項(xiàng)目
- 2012年衛(wèi)輝市招聘教師筆試面試成績(jī)花名冊(cè)
- DL∕T 5210.4-2018 電力建設(shè)施工質(zhì)量驗(yàn)收規(guī)程 第4部分:熱工儀表及控制裝置
- 大學(xué)與青年發(fā)展智慧樹(shù)知到期末考試答案章節(jié)答案2024年華僑大學(xué)
- 北京海淀人大附2025屆高三第四次模擬考試歷史試卷含解析
- 建教幫APP測(cè)試題庫(kù)和答案
- 幽門(mén)螺桿菌與胃癌
評(píng)論
0/150
提交評(píng)論