WPF資源、樣式和模板課件_第1頁(yè)
WPF資源、樣式和模板課件_第2頁(yè)
WPF資源、樣式和模板課件_第3頁(yè)
WPF資源、樣式和模板課件_第4頁(yè)
WPF資源、樣式和模板課件_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、項(xiàng)目六 WPF資源、樣式和模板項(xiàng)目美化講師 劉振東第1頁(yè),共55頁(yè)。本章導(dǎo)讀:本章的主要內(nèi)容是利用資源、樣式和模板的相關(guān)知識(shí),美化圖書(shū)管理系統(tǒng)。通過(guò)項(xiàng)目“系統(tǒng)中各控件美化”為導(dǎo)向,四個(gè)任務(wù)(美化TextBlock控件、美化TextBox控件、美化Button控件和自定義控件模板)為驅(qū)動(dòng),學(xué)習(xí)有關(guān)WPF資源、樣式和模板的知識(shí),本項(xiàng)目著力使學(xué)習(xí)者對(duì)WPF的資源、樣式有一定認(rèn)識(shí),初步掌握自定義控件模板的用法。第2頁(yè),共55頁(yè)。項(xiàng)目六 WPF資源、樣式和模板項(xiàng)目美化任務(wù)一 美化TextBlock控件第3頁(yè),共55頁(yè)。讀者添加界面使用的是默認(rèn)WPF元素樣式,我們可以利用XAML資源來(lái)實(shí)現(xiàn)對(duì)其的美化。即在

2、XAML資源中用Style元素聲明樣式和模板,并在控件中引用它。此次任務(wù)修改的是TextBlock控件的外觀。一、任務(wù)描述: / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / 第4頁(yè),共55頁(yè)。二、知識(shí)準(zhǔn)備:1資源2使用Pack URI路徑訪問(wèn)二進(jìn)制資源3XAML解析資源的順序4靜態(tài)資源第5頁(yè),共55頁(yè)。 資源是指那些項(xiàng)目中可以和C#代碼分離的固定不變的信息。實(shí)際上就是把一些應(yīng)用程序必須使用的資源與應(yīng)用程序自身打包在一起,這樣資源就不會(huì)意外丟失了,代價(jià)是應(yīng)用程序體積會(huì)變大。 資源文件是指不能直接執(zhí)行的文件,例如圖像、字符

3、串、圖標(biāo)、聲音、視頻、XAML文件等。各種編程語(yǔ)言的編譯器會(huì)把這些文件編譯進(jìn)目標(biāo)文件(最終的.exe或.dll文件),資源文件在目標(biāo)文件里以二進(jìn)制數(shù)據(jù)的形式存在、形成目標(biāo)文件的資源段。而在WPF中資源文件以哪種形式保存,則由其所在文件的“生成操作”屬性來(lái)決定。二、知識(shí)準(zhǔn)備:1、資源第6頁(yè),共55頁(yè)。 在WPF項(xiàng)目中,既可以包含嵌入的資源(將資源文件嵌入到Resource.resx中),又可以包含鏈接的資源(將資源文件單獨(dú)保存在項(xiàng)目中,而在擴(kuò)展名為.resx的文件中只保存資源文件的鏈接)。 在WPF中,首選方式是將資源文件作為鏈接的資源,而不是作為嵌入的資源。二、知識(shí)準(zhǔn)備:1、資源第7頁(yè),共55

4、頁(yè)。(1)嵌入的資源 嵌入的資源是指包含在Properties文件夾下的Resources.resx文件中的資源。這是WinForm應(yīng)用程序默認(rèn)使用的方式。一旦將某個(gè)文件作為嵌入的資源,系統(tǒng)自動(dòng)將其轉(zhuǎn)化為強(qiáng)類型的對(duì)象,然后以二進(jìn)制形式嵌入到Properties文件夾下的Resources.resx中。在WPF應(yīng)用程序中,一般不使用這種方式,而是使用鏈接的資源,只有某些特殊需求才會(huì)使用這種方式。二、知識(shí)準(zhǔn)備:1、資源第8頁(yè),共55頁(yè)。 對(duì)于在多個(gè)項(xiàng)目之間共享的資源文件,如果不希望開(kāi)發(fā)人員修改資源數(shù)據(jù)文件的內(nèi)容,例如包含公司徽標(biāo)、商標(biāo)信息等文件,使用嵌入的資源也是一種可選擇的方案。優(yōu)點(diǎn)是將這些文件

5、作為嵌入的資源后,只需要將Resources.resx文件復(fù)制到其他項(xiàng)目中即可,而不需要復(fù)制關(guān)聯(lián)的資源數(shù)據(jù)文件;缺點(diǎn)是無(wú)法修改資源文件的內(nèi)容。二、知識(shí)準(zhǔn)備:1、資源第9頁(yè),共55頁(yè)。 如果要添加的資源是字符串(不是指文本文件),則只能將其作為嵌入的資源,而不能作為鏈接的資源。可以使用應(yīng)用程序Properties文件夾中的Resources.resx資源文件。打開(kāi)資源文件的方法是在項(xiàng)目管理器中展開(kāi)Properties結(jié)點(diǎn)并雙擊Resources.resx文件。如圖所示。二、知識(shí)準(zhǔn)備:1、資源第10頁(yè),共55頁(yè)。在XAML代碼中使用Resources.resx中的資源,先要把程序的Properti

6、es名稱空間映射為XAML名稱空間,然后使用x:Static標(biāo)簽擴(kuò)展來(lái)訪問(wèn)資源:二、知識(shí)準(zhǔn)備:1、資源 / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / 第11頁(yè),共55頁(yè)。 二、知識(shí)準(zhǔn)備:1、資源第12頁(yè),共55頁(yè)。運(yùn)行效果如下圖所示。二、知識(shí)準(zhǔn)備:第13頁(yè),共55頁(yè)。Resources.resx文件內(nèi)容的組織形式是“鍵-值”對(duì),編譯后,會(huì)形成Properties名稱空間中的Resources類,使用這個(gè)類的方法或?qū)傩跃湍塬@取資源。為了讓XAML編譯器能夠訪問(wèn)這個(gè)類,一定要把Resources.resx的訪問(wèn)級(jí)別由In

7、ternal改為Public。一般將數(shù)據(jù)庫(kù)連接字符串作為嵌入的資源來(lái)保存。二、知識(shí)準(zhǔn)備:1、資源第14頁(yè),共55頁(yè)。(2)鏈接的資源鏈接資源是指將文件添加到項(xiàng)目中時(shí),在對(duì)應(yīng)的擴(kuò)展名為.resx的文件中只保存這些文件的相對(duì)路徑或鏈接,而被鏈接的這些文件單獨(dú)存儲(chǔ),而且可編輯。注意這里所說(shuō)的“擴(kuò)展名為.resx的文件”不是指Properties文件夾下的Resources.resx文件,而是指單獨(dú)添加到項(xiàng)目中的擴(kuò)展名為.resx的文件。編譯項(xiàng)目時(shí),再將這些文件嵌入到程序集中,即編譯到.exe或者.dll文件中。用這種方式的好處是可以在項(xiàng)目中直接修改資源文件的內(nèi)容。二、知識(shí)準(zhǔn)備:1、資源第15頁(yè),共5

8、5頁(yè)。如果在程序中添加一個(gè)mp3文件和一張圖片,如圖所示,結(jié)果文件的體積就會(huì)膨脹好幾兆。二、知識(shí)準(zhǔn)備:1、資源 / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / 第16頁(yè),共55頁(yè)。注意的一點(diǎn)是,如果讓外部文件編譯進(jìn)目標(biāo)成為二進(jìn)制資源,必須在屬性窗口中把文件的“生成操作”屬性值設(shè)為“資源”。一般情況下如果“生成操作”屬性被設(shè)為資源,則“復(fù)制到輸出目錄”屬性就設(shè)為“不復(fù)制”。二、知識(shí)準(zhǔn)備:第17頁(yè),共55頁(yè)。 WPF對(duì)二進(jìn)制資源的訪問(wèn)有自己的一套方法,稱為Pack URI路徑。具體格式如下:Pack:/applicatio

9、n/程序集名稱;可選版本號(hào);文件夾名稱/文件名稱 實(shí)際上因?yàn)閜ack:/application可以省略、程序集名稱和版本號(hào)常使用缺省值,所以最終直接使用: 文件夾名稱/文件名稱 即可。二、知識(shí)準(zhǔn)備:2、使用Pack URI路徑訪問(wèn)二進(jìn)制資源第18頁(yè),共55頁(yè)。如前面例子我們向資源中添加一個(gè)圖片,叫做Tiger_004.jpg,添加入資源文件后,可以給他命名,比如叫它aaa。如此,添加文件就完成了。然后,在程序中調(diào)用,只需要一句話: Properties.Resources.資源名比如之前添加的圖片,就寫(xiě)Properties.Resources.aaa就可以了。二、知識(shí)準(zhǔn)備:2、使用Pack U

10、RI路徑訪問(wèn)二進(jìn)制資源第19頁(yè),共55頁(yè)。我們?cè)傧蝽?xiàng)目中添加一圖片Tiger_003.jpg,用這兩張圖片填充元素,采用兩種方式來(lái)訪問(wèn)圖片。代碼如下: 二、知識(shí)準(zhǔn)備:2、使用Pack URI路徑訪問(wèn)二進(jìn)制資源第20頁(yè),共55頁(yè)。運(yùn)行效果如下:二、知識(shí)準(zhǔn)備:第21頁(yè),共55頁(yè)。資源的定義及XAML中引用(1)應(yīng)用程序級(jí)資源:定義在App.xaml文件中,作為整個(gè)應(yīng)用程序共享的資源存在。(2)窗體級(jí)資源:定義在Window或Page中,作為一個(gè)窗體或頁(yè)面共享的資源存在。(3)文件級(jí)資源:定義在資源字典的XAML文件中,再引用。(4)對(duì)象(控件)級(jí)資源:定義在某個(gè)ContentControl中,作為

11、其子容器、子控件共享的資源。二、知識(shí)準(zhǔn)備:3、XAML解析資源的順序第22頁(yè),共55頁(yè)。 在XAML中解析資源按照由引用資源的控件向外層容器依次調(diào)用資源。例如在在應(yīng)用程序級(jí)別、窗體級(jí)別及對(duì)象級(jí)別分為定義x:Key相同的資源:在App.xaml文件中:二、知識(shí)準(zhǔn)備:3、XAML解析資源的順序 / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / 第23頁(yè),共55頁(yè)。 二、知識(shí)準(zhǔn)備:第24頁(yè),共55頁(yè)。在窗體的XAML文件中: 二、知識(shí)準(zhǔn)備:第25頁(yè),共55頁(yè)。在窗體的XAML文件中: 二、知識(shí)準(zhǔn)備:第26頁(yè),共55頁(yè)。在窗體的

12、XAML文件中: 二、知識(shí)準(zhǔn)備:第27頁(yè),共55頁(yè)。在窗體的XAML文件中: 二、知識(shí)準(zhǔn)備:第28頁(yè),共55頁(yè)。在窗體的XAML文件中: 二、知識(shí)準(zhǔn)備: / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / 第29頁(yè),共55頁(yè)。運(yùn)行效果如下。讀者要細(xì)細(xì)品味本例代碼。二、知識(shí)準(zhǔn)備:第30頁(yè),共55頁(yè)。 資源可以作為靜態(tài)資源或動(dòng)態(tài)資源進(jìn)行引用。這是通過(guò)使用 StaticResource 標(biāo)記擴(kuò)展或 DynamicResource 標(biāo)記擴(kuò)展完成的。通常來(lái)說(shuō),不需要在運(yùn)行時(shí)更改的資源使用靜態(tài)資源;而需要在運(yùn)行時(shí)更改的資源使用動(dòng)態(tài)資源

13、。動(dòng)態(tài)資源需要使用的系統(tǒng)開(kāi)銷(xiāo)大于靜態(tài)資源的系統(tǒng)開(kāi)銷(xiāo)。例如以下的例子:二、知識(shí)準(zhǔn)備:4、靜態(tài)資源和動(dòng)態(tài)資源第31頁(yè),共55頁(yè)。 二、知識(shí)準(zhǔn)備:第32頁(yè),共55頁(yè)。 二、知識(shí)準(zhǔn)備:第33頁(yè),共55頁(yè)。以上的例子在運(yùn)行時(shí)顯示如下:二、知識(shí)準(zhǔn)備:第34頁(yè),共55頁(yè)。而點(diǎn)擊“Change Button Resource”按鈕后,顯示的結(jié)果為:二、知識(shí)準(zhǔn)備:第35頁(yè),共55頁(yè)。從程序執(zhí)行的結(jié)果來(lái)看,我們可以得到如下的結(jié)論:二、知識(shí)準(zhǔn)備:(1)靜態(tài)資源引用是從控件所在的容器開(kāi)始依次向上查找的,而動(dòng)態(tài)資源的引用是從控件開(kāi)始向上查找的(即控件的資源覆蓋其父容器的同名資源) (2)更改資源時(shí),動(dòng)態(tài)引用的控件樣式發(fā)

14、生變化(即Dynamic Resource Button A發(fā)生變化) 第36頁(yè),共55頁(yè)。如果要更改Dynamic Resource Button B的背景,需要在按鈕的事件中添加以下代碼(將Dynamic Resource Button B的控件的x:Name設(shè)置為btn4)private void btn4_Click(object sender, RoutedEventArgs e) SolidColorBrush brushB = new SolidColorBrush(Colors.Blue); this.btn4.ResourcesButtonBrush = brushB; 二、

15、知識(shí)準(zhǔn)備:第37頁(yè),共55頁(yè)。執(zhí)行的結(jié)果如下:二、知識(shí)準(zhǔn)備:第38頁(yè),共55頁(yè)。靜態(tài)資源引用最適合于以下情況:二、知識(shí)準(zhǔn)備:(1)應(yīng)用程序設(shè)計(jì)幾乎將所有的應(yīng)用程序資源集中到頁(yè)或應(yīng)用程序級(jí)別的資源字典中。靜態(tài)資源引用不會(huì)基于運(yùn)行時(shí)行為(例如重新加載頁(yè))進(jìn)行重新求值,因此,根據(jù)資源和應(yīng)用程序設(shè)計(jì)避免大量不必要的動(dòng)態(tài)資源引用,這樣可以提高性能。(2)正在創(chuàng)建將編譯為 DLL 并打包為應(yīng)用程序的一部分或在應(yīng)用程序之間共享的資源字典。第39頁(yè),共55頁(yè)。(3)正在為自定義控件創(chuàng)建一個(gè)主題,并定義在主題中使用的資源。對(duì)于這種情況,通常不需要?jiǎng)討B(tài)資源引用查找行為,而需要靜態(tài)資源引用行為,以使該查找可預(yù)測(cè)并且

16、獨(dú)立于該主題。使用動(dòng)態(tài)資源引用時(shí),即使是主題中的引用也會(huì)直到運(yùn)行時(shí)才進(jìn)行求值,并且在應(yīng)用主題時(shí),某個(gè)本地元素有可能會(huì)重新定義主題試圖引用的鍵,并且本地元素在查找中會(huì)位于主題本身之前。如果發(fā)生該情況,主題將不會(huì)按預(yù)期方式運(yùn)行。二、知識(shí)準(zhǔn)備:靜態(tài)資源引用最適合于以下情況: / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / r 第40頁(yè),共55頁(yè)。(4)正在使用資源來(lái)設(shè)置大量依賴項(xiàng)屬性。依賴項(xiàng)屬性具有由屬性系統(tǒng)啟用的有效值緩存功能,因此,如果為可以在加載時(shí)求值的依賴項(xiàng)屬性提供值,該依賴項(xiàng)屬性將不必查看重新求值的表達(dá)式,并且可以

17、返回最后一個(gè)有效值。該方法具有性能優(yōu)勢(shì)。二、知識(shí)準(zhǔn)備:靜態(tài)資源引用最適合于以下情況:第41頁(yè),共55頁(yè)。(1)資源的值取決于直到運(yùn)行時(shí)才知道的情況。這包括系統(tǒng)資源,或用戶可設(shè)置的資源。例如,可以創(chuàng)建引用由 SystemColors、SystemFonts 或 SystemParameters 公開(kāi)的系統(tǒng)屬性的 setter 值。這些值是真正動(dòng)態(tài)的,因?yàn)樗鼈冏罱K來(lái)自于用戶和操作系統(tǒng)的運(yùn)行時(shí)環(huán)境。還可以使用可以更改的應(yīng)用程序級(jí)別的主題,在此情況下,頁(yè)級(jí)別的資源訪問(wèn)還必須捕獲更改。二、知識(shí)準(zhǔn)備:動(dòng)態(tài)資源引用最適合于以下情況:第42頁(yè),共55頁(yè)。(2)正在為自定義控件創(chuàng)建或引用主題樣式。(3)有一個(gè)存

18、在依存關(guān)系的復(fù)雜資源結(jié)構(gòu),在這種情況下,可能需要前向引用。靜態(tài)資源引用不支持前向引用,但動(dòng)態(tài)資源引用支持,因?yàn)橘Y源直到運(yùn)行時(shí)才需要進(jìn)行求值,因此,前向引用不是一個(gè)相關(guān)概念。(4)從編譯或工作集角度來(lái)說(shuō),引用的資源特別大,并且加載頁(yè)時(shí)可能無(wú)法立即使用該資源。靜態(tài)資源引用始終在加載頁(yè)時(shí)從 XAML 加載;而動(dòng)態(tài)資源引用直到實(shí)際使用時(shí)才會(huì)加載。二、知識(shí)準(zhǔn)備:動(dòng)態(tài)資源引用最適合于以下情況:第43頁(yè),共55頁(yè)。 最后,關(guān)于資源,WPF中的資源一般是指資源字典(DictionaryResource)中的元素,可以把任何對(duì)象置于其中以便訪問(wèn)。要獲得一個(gè)資源字典,可以新建: 二、知識(shí)準(zhǔn)備:第44頁(yè),共55頁(yè)。但更多的時(shí)候是通過(guò)Resources屬性來(lái)獲得的:二、知識(shí)準(zhǔn)備:Application.Resources:整個(gè)應(yīng)用程序有效FramewrokElement.Resourc

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論