日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF快速指导1:资源

發布時間:2025/7/14 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF快速指导1:资源 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WPF快速指導1:資源
??? 本文摘要:
??? 1:資源應用場景;
??? 2:靜態資源和動態資源;
??? 3:Application.Current.Resources和Application.Current.Resources.MergedDictionaries
??? 4:路徑


一:資源的應用場景


場景1:格式化界面顯示元素
??? 所謂格式化界面顯示元素,就是使用統一的風格來定義軟件的每個界面。
??? 要滿足本需求,只需要在App.xaml中如下定義資源

<Application.Resources><Style TargetType="TextBlock" x:Key="TitleText"><Setter Property="Background" Value="Blue"/><Setter Property="FontSize" Value="12"/></Style><Style TargetType="TextBlock" x:Key="Label"><Setter Property="Background" Value="Blue"/><Setter Property="FontSize" Value="12"/></Style> </Application.Resources>

?

同時,在每個頁面如下引用資源即可:

<StackPanel><TextBlock Style="{StaticResource TitleText}">Title</TextBlock><TextBlock Style="{StaticResource Label}">Label</TextBlock></StackPanel>

?

場景2:動態更新界面風格
??? 要動態更新界面風格,首先需要定義多種界面風格。假設有Sytle1和Style2兩種風格,其中Style1在Style1.xaml中定義:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Style TargetType="TextBlock" x:Key="TitleText"><Setter Property="Background" Value="Blue"/><Setter Property="FontSize" Value="12"/></Style><Style TargetType="TextBlock" x:Key="Label"><Setter Property="Background" Value="Blue"/><Setter Property="FontSize" Value="12"/></Style> </ResourceDictionary>

?

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="{DynamicResource TitleText}">Title</TextBlock><TextBlock Style="{DynamicResource Label}">Label</TextBlock>

?

??? 換成

<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:资源的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。