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

下載本文檔

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

文檔簡介

1、項目六 WPF資源、樣式和模板項目美化講師 劉振東本章導讀:本章的主要內(nèi)容是主要內(nèi)容是利用資源、樣式和模板的相關(guān)知識利用資源、樣式和模板的相關(guān)知識,美化圖書管理系統(tǒng)。通過項目項目“系統(tǒng)中各控件美化系統(tǒng)中各控件美化”為導向,四,四個任務(美化TextBlock控件、美化TextBox控件、美化Button控件和自定義控件自定義控件模板模板)為驅(qū)動,學習有關(guān)學習有關(guān)WPFWPF資源、樣式和模板的知識,資源、樣式和模板的知識,本項目著力使學習者對WPF的資源、樣式有一定認識,初步掌握自定義控件模板的用法。項目六 WPF資源、樣式和模板項目美化任務一任務一 美化美化TextBlockTextBlock

2、控件控件讀者添加界面使用的是默認WPF元素樣式,我們可以利用XAML資源來實現(xiàn)對其的美化。即在XAML資源中用Style元素聲明樣式和模板,并在控件中引用它。此次任務修改的是TextBlock控件的外觀。一、任務描述:http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:

3、/ http:/ http:/ http:/ http:/ http:/ / http:/ http:/www.gz- http:/ http:/ 二、知識準備:1資源2使用Pack URI路徑訪問二進制資源3XAML解析資源的順序4靜態(tài)資源 資源是指那些項目中可以和C#代碼分離的固定不變的信息。實際上就是把一些應用程序必須使用的資源與應用程序自身打包在一起,這樣資源就不會意外丟失了,代價是應用程序體積會變大。 資源文件是指不能直接執(zhí)行的文件,例如圖像、字符串、圖標、聲音、視頻、XAML文件等。各種編程語言的編譯器會把這些文件編譯進目標文件(最終的.exe

4、或.dll文件),資源文件在目標文件里以二進制數(shù)據(jù)的形式存在、形成目標文件的資源段。而在WPF中資源文件以哪種形式保存,則由其所在文件的“生成操作”屬性來決定。二、知識準備:1、資源 在WPF項目中,既可以包含嵌入的資源(將資源文件嵌入到Resource.resx中),又可以包含鏈接的資源(將資源文件單獨保存在項目中,而在擴展名為.resx的文件中只保存資源文件的鏈接)。 在WPF中,首選方式是將資源文件作為鏈接的資源,而不是作為嵌入的資源。二、知識準備:1、資源(1)嵌入的資源 嵌入的資源是指包含在Properties文件夾下的Resources.resx文件中的資源。這是WinForm應用

5、程序默認使用的方式。一旦將某個文件作為嵌入的資源,系統(tǒng)自動將其轉(zhuǎn)化為強類型的對象,然后以二進制形式嵌入到Properties文件夾下的Resources.resx中。在WPF應用程序中,一般不使用這種方式,而是使用鏈接的資源,只有某些特殊需求才會使用這種方式。二、知識準備:1、資源 對于在多個項目之間共享的資源文件,如果不希望開發(fā)人員修改資源數(shù)據(jù)文件的內(nèi)容,例如包含公司徽標、商標信息等文件,使用嵌入的資源也是一種可選擇的方案。優(yōu)點是將這些文件作為嵌入的資源后,只需要將Resources.resx文件復制到其他項目中即可,而不需要復制關(guān)聯(lián)的資源數(shù)據(jù)文件;缺點是無法修改資源文件的內(nèi)容。二、知識準備

6、:1、資源 如果要添加的資源是字符串(不是指文本文件),則只能將其作為嵌入的資源,而不能作為鏈接的資源。可以使用應用程序Properties文件夾中的Resources.resx資源文件。打開資源文件的方法是在項目管理器中展開Properties結(jié)點并雙擊Resources.resx文件。如圖所示。二、知識準備:1、資源在XAML代碼中使用Resources.resx中的資源,先要把程序的Properties名稱空間映射為XAML名稱空間,然后使用x:Static標簽擴展來訪問資源:二、知識準備:1、資源http:/ http:/ http:/ http:/ http:/ http:/ htt

7、p:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ / http:/ http:/www.gz- http:/ http:/ 二、知識準備:1、資源運行效果如下圖所示。二、知識準備:Resources.resx文件內(nèi)容的組織形式是“鍵-值”對,編譯

8、后,會形成Properties名稱空間中的Resources類,使用這個類的方法或?qū)傩跃湍塬@取資源。為了讓XAML編譯器能夠訪問這個類,一定要把Resources.resx的訪問級別由Internal改為Public。一般將數(shù)據(jù)庫連接字符串作為嵌入的資源來保存。二、知識準備:1、資源(2)鏈接的資源鏈接資源是指將文件添加到項目中時,在對應的擴展名為.resx的文件中只保存這些文件的相對路徑或鏈接,而被鏈接的這些文件單獨存儲,而且可編輯。注意這里所說的“擴展名為.resx的文件”不是指Properties文件夾下的Resources.resx文件,而是指單獨添加到項目中的擴展名為.resx的文件

9、。編譯項目時,再將這些文件嵌入到程序集中,即編譯到.exe或者.dll文件中。用這種方式的好處是可以在項目中直接修改資源文件的內(nèi)容。二、知識準備:1、資源如果在程序中添加一個mp3文件和一張圖片,如圖所示,結(jié)果文件的體積就會膨脹好幾兆。二、知識準備:1、資源http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/

10、 http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ / http:/ http:/www.gz- http:/ http:/ 注意的一點是,如果讓外部文件編譯進目標成為二進制資源,必須在屬性窗口中把文件的“生成操作”屬性值設(shè)為“資源”。一般情況下如果“生成操作”屬性被設(shè)為資源,則“復制到輸出目錄”屬性就設(shè)為“不復制”。二、知識準備: WPF對二進制資源的訪問有自己的一套方法,稱為Pack URI路徑。具體格式如下:Pack:/application/程序集名稱;可選版本號;文件夾名稱/文件名稱

11、實際上因為pack:/application可以省略、程序集名稱和版本號常使用缺省值,所以最終直接使用: 文件夾名稱/文件名稱 即可。二、知識準備:2、使用Pack URI路徑訪問二進制資源如前面例子我們向資源中添加一個圖片,叫做Tiger_004.jpg,添加入資源文件后,可以給他命名,比如叫它aaa。如此,添加文件就完成了。然后,在程序中調(diào)用,只需要一句話: Properties.Resources.資源名資源名比如之前添加的圖片,就寫Properties.Resources.aaa就可以了。二、知識準備:2、使用Pack URI路徑訪問二進制資源我們再向項目中添加一圖片Tiger_003

12、.jpg,用這兩張圖片填充元素,采用兩種方式來訪問圖片。代碼如下: 二、知識準備:2、使用Pack URI路徑訪問二進制資源運行效果如下:二、知識準備:資源的定義及XAML中引用(1)應用程序級資源:定義在App.xaml文件中,作為整個應用程序共享的資源存在。(2)窗體級資源:定義在Window或Page中,作為一個窗體或頁面共享的資源存在。(3)文件級資源:定義在資源字典的XAML文件中,再引用。(4)對象(控件)級資源:定義在某個ContentControl中,作為其子容器、子控件共享的資源。二、知識準備:3、XAML解析資源的順序 在XAML中解析資源按照由引用資源的控件向外層容器依次

13、調(diào)用資源。例如在在應用程序級別、窗體級別及對象級別分為定義x:Key相同的資源:在App.xaml文件中:二、知識準備:3、XAML解析資源的順序http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/

14、 / http:/ http:/www.gz- http:/ http:/ 二、知識準備:在窗體的XAML文件中: 二、知識準備:在窗體的XAML文件中: 二、知識準備:在窗體的XAML文件中: 二、知識準備:在窗體的XAML文件中: 二、知識準備:在窗體的XAML文件中: 二、知識準備:http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ htt

15、p:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ / http:/ http:/www.gz- http:/ http:/ 運行效果如下。讀者要細細品味本例代碼。二、知識準備: 資源可以作為靜態(tài)資源或動態(tài)資源進行引用。這是通過使用 StaticResource 標記擴展或標記擴展或 DynamicResource 標記擴展標記擴展完成的。通常來說,不需要在運行時更改的資源使用靜態(tài)資源;而需要在運行時更改的資源使用動態(tài)資源。動

16、態(tài)資源需要使用的系統(tǒng)開銷大于靜態(tài)資源的系統(tǒng)開銷。例如以下的例子:二、知識準備:4、靜態(tài)資源和動態(tài)資源 二、知識準備: 二、知識準備:以上的例子在運行時顯示如下:二、知識準備:而點擊“Change Button Resource”按鈕后,顯示的結(jié)果為:二、知識準備:從程序執(zhí)行的結(jié)果來看,我們可以得到如下的結(jié)論:二、知識準備:(1)靜態(tài)資源引用是從控件所在的容器開始依次向上查找的,而動態(tài)資源的引用是從控件開始向上查找的(即控件的資源覆蓋其父容器的同名資源) (2)更改資源時,動態(tài)引用的控件樣式發(fā)生變化(即Dynamic Resource Button A發(fā)生變化) 如果要更改Dynamic Res

17、ource 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; 二、知識準備:執(zhí)行的結(jié)果如下:二、知識準備: 靜態(tài)資源引用最適合于以下情況:二、知識準備:(1)應用程序設(shè)計幾乎將所有的應用程序

18、資源集中到頁或應用程序級別的資源字典中。靜態(tài)資源引用不會基于運行時行為(例如重新加載頁)進行重新求值,因此,根據(jù)資源和應用程序設(shè)計避免大量不必要的動態(tài)資源引用,這樣可以提高性能。(2)正在創(chuàng)建將編譯為 DLL 并打包為應用程序的一部分或在應用程序之間共享的資源字典。(3)正在為自定義控件創(chuàng)建一個主題,并定義在主題中使用的資源。對于這種情況,通常不需要動態(tài)資源引用查找行為,而需要靜態(tài)資源引用行為,以使該查找可預測并且獨立于該主題。使用動態(tài)資源引用時,即使是主題中的引用也會直到運行時才進行求值,并且在應用主題時,某個本地元素有可能會重新定義主題試圖引用的鍵,并且本地元素在查找中會位于主題本身之前。

19、如果發(fā)生該情況,主題將不會按預期方式運行。二、知識準備: 靜態(tài)資源引用最適合于以下情況:http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ / http:/

20、http:/www.gz- http:/ http:/ r (4)正在使用資源來設(shè)置大量依賴項屬性。依賴項屬性具有由屬性系統(tǒng)啟用的有效值緩存功能,因此,如果為可以在加載時求值的依賴項屬性提供值,該依賴項屬性將不必查看重新求值的表達式,并且可以返回最后一個有效值。該方法具有性能優(yōu)勢。二、知識準備: 靜態(tài)資源引用最適合于以下情況:(1)資源的值取決于直到運行時才知道的情況。這包括系統(tǒng)資源,或用戶可設(shè)置的資源。例如,可以創(chuàng)建引用由 SystemColors、SystemFonts 或 SystemParameters 公開的系統(tǒng)屬性的 setter 值。這些值是真正動態(tài)的,因為它們最終來自于用戶和操作系統(tǒng)的運行時環(huán)境。還可以使用可以更改的應用程序級別的主題,在此情況下,頁級別的資源訪問還必須捕獲更改。二、知識準備: 動態(tài)資源引用最適合于以下情況:(2)正在為自定義控件創(chuàng)建或引用主題樣式。(3)有一個存在依存關(guān)系的復雜資源結(jié)構(gòu),在這種情況下,可能需

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論