WPF快速指导1:资源
WPF快速指導1:資源
??? 本文摘要:
??? 1:資源應用場景;
??? 2:靜態資源和動態資源;
??? 3:Application.Current.Resources和Application.Current.Resources.MergedDictionaries
??? 4:路徑
一:資源的應用場景
場景1:格式化界面顯示元素
??? 所謂格式化界面顯示元素,就是使用統一的風格來定義軟件的每個界面。
??? 要滿足本需求,只需要在App.xaml中如下定義資源
?
同時,在每個頁面如下引用資源即可:
<StackPanel><TextBlock Style="{StaticResource TitleText}">Title</TextBlock><TextBlock Style="{StaticResource Label}">Label</TextBlock></StackPanel>?
場景2:動態更新界面風格
??? 要動態更新界面風格,首先需要定義多種界面風格。假設有Sytle1和Style2兩種風格,其中Style1在Style1.xaml中定義:
?
Style2在Style2.xaml中定義(假設將Style1中的Blue改為Yellow,12改為24,不再列出)。那么,在頁面中,我們如下引用:
<StackPanel><TextBlock Style="{DynamicResource TitleText}">Title</TextBlock><TextBlock Style="{DynamicResource Label}">Label</TextBlock><Button Click="Button1_Click">Style1</Button><Button Click="Button2_Click">Style2</Button></StackPanel>?
同時,后臺代碼為:
ResourceDictionary style1;ResourceDictionary style2;private void Button1_Click(object sender, RoutedEventArgs e){style1 = new ResourceDictionary();style1.Source = new Uri(@"Resouce\Style1.xaml", UriKind.Relative);Application.Current.Resources = style1;}private void Button2_Click(object sender, RoutedEventArgs e){style2 = new ResourceDictionary();style2.Source = new Uri(@"Resouce\Style2.xaml", UriKind.Relative);Application.Current.Resources = style2;}?
??? 如此一來,我們便完成動態的界面風格變化。
二:靜態資源和動態資源
??? 在上文的場景二示例中,如果將XAML中的
?
??? 換成
<TextBlock Style="{StaticResource TitleText}">Title</TextBlock><TextBlock Style="{StaticResource Label}">Label</TextBlock>?
??? 我們會發現界面的風格根本沒有得到改變。這里我們引出靜態資源和動態資源最重要的一個區別:靜態資源不基于運行時行為進行重新求值,而動態資源在運行時加載。
??? 關于靜態資源和動態資源其它區別請查看MSDN。
三:Application.Current.Resources和Application.Current.Resources.MergedDictionaries
??? 先來看這兩個變量的原型:
??? Application.Current.Resources的原型是一個ResourceDictionary。
??? Application.Current.Resources.MergedDictionaries是一個Collection<ResourceDictionary> 。
??? 從本質上來講,這兩個變量沒有區別,MergedDictionaries是在表現形式上,在運行時擴展系統的資源。
??? 我們再來看上文中運行時動態改變界面的示例,我們通過動態給Application.Current.Resources賦值,來改變界面風格。
??? 在實際使用中,必不要這么做。因為不管你是否需要在運行時動態更新部分界面風格,有些資源是肯定不變的。也就是說,一個系統,必定已經存在一個資源文件,即,最好不要在運行時改變Application.Current.Resources。那么,實際要做的,就是動態的增加或者刪除Application.Current.Resources.MergedDictionaries就可以了。
四:路徑
第一種:
imgContent.Source = new BitmapImage(new Uri("Content.jpg", UriKind.Relative)); imgResource.Source = new BitmapImage(new Uri("Resource.jpg", UriKind.Relative));?
第二種:
imgContent.Source = new BitmapImage(new Uri("pack://application:,,,/Content.jpg")); imgResource.Source = new BitmapImage(new Uri("pack://application:,,,/Resource.jpg"));?
第三種:
imgContent.Source = new BitmapImage(new Uri("pack://SiteOfOrigin:,,,/Content.jpg"));?
最后一點需要說說的是路徑的問題,關于路徑,在WPF中有幾種表示方法:
第一種和第二種都可以訪問相對WPF資源路徑的Resource和Content資源。第三種方式可以訪問運行目錄下的Content資源文件以及完全松散的文件。完全松散的文件指那些沒有添加到項目中,只是拷貝在程序目錄中的文件。
應用程序根本不知道它的存在。pack://application:,,,/Content.jpg表示當前項目的資源。它是pack://application:,,,/DllName;Component/Content.jpg的簡寫。將DllName替換成其他程序集,就可以訪問其他程序集的資源。
pack://SiteOfOrigin:,,,/Content.jpg表示從部署位置訪問文件。
pack URI格式是XML文件規范的一部分,具體格式如下 pack://packageURI/partPath。PackageURI實際上是在URI中放一個URI,它是把反斜杠都變成了逗號。packageURI的WPF資源路徑可以志向一個XPS文檔,例如file : /// c: /Document . xps會被編碼為file:...c:,Document.xps。在WPF程序中有兩種URI系統是特別處理的:
siteOfOrigin:/// 編碼后siteOfOrigin:,,,
application:/// 編碼后application:,,,
3個逗號其實是反斜杠編碼過來的。
該系列參考:MSDN、《WPF編程》
練習:
1:要統一整個應用程序的風格,應該如何來處理。
2:要對某個特定的頁面(Window或Page)上所有的TextBlock統一風格,應該如何處理。
3:靜態資源和動態資源的一個區別。
4:Application.Current.Resources和Application.Current.Resources.MergedDictionaries的用處。
總結
以上是生活随笔為你收集整理的WPF快速指导1:资源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 确保***测试计划成功的10个秘诀(语录
- 下一篇: IPv6的脚步声近了!