天天看點

wpfのuri(讓你完全明白wpf的圖檔加載方式以及URI寫法)

原文: wpfのuri(讓你完全明白wpf的圖檔加載方式以及URI寫法)

絕對 pack WPF URI

pack://application:,,,/是協定;“,,,”是“///”的變體

1.資源檔案 — 本地程式集

Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute);

子檔案夾中的資源檔案 — 本地程式集(資源檔案在本地程式集的子檔案夾)

Uri uri = new Uri("pack://application:,,,/Subfolder/ResourceFile.xaml", UriKind.Absolute);

2.資源檔案 — 所引用的程式集(資源檔案在别的程式集)

Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute);

3.所引用的程式集的子檔案夾中的資源檔案(資源檔案别的程式的子檔案夾)

Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute);

4.所引用的版本化程式集中的資源檔案(版本化在中間加入版本資訊)

Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml", UriKind.Absolute);

綜上:路徑前部分是”pack://application;,,,/程式集名字;”;後半部分”component/路徑“”;合起來是一個絕對路徑;如果是本地程式集,程式集名字和compoent可以省略(;也省略掉)

WPF URI内容檔案

1.Uri uri = new Uri("pack://application:,,,/ContentFile.xaml", UriKind.Absolute);

2.子檔案夾中的内容檔案

Uri uri = new Uri("pack://application:,,,/Subfolder/ContentFile.xaml", UriKind.Absolute);

3.源站點檔案

Uri uri = new Uri("pack://siteoforigin:,,,/SOOFile.xaml", UriKind.Absolute);

4.子檔案夾中的源站點檔案

Uri uri = new Uri("pack://siteoforigin:,,,/Subfolder/SOOFile.xaml", UriKind.Absolute);

相對 pack URI      

1.WPF URI資源檔案 — 本地程式集

Uri uri = new Uri("/ResourceFile.xaml", UriKind.Relative);

2.子檔案夾中的資源檔案 — 本地程式集

Uri uri = new Uri("/Subfolder/ResourceFile.xaml", UriKind.Relative);  

3.資源檔案 — 所引用的程式集

Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative);

4.子檔案夾中的資源檔案 — 所引用的程式集

Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Relative);

内容檔案

Uri uri = new Uri("/ContentFile.xaml", UriKind.Relative);        

WPF URI子檔案夾中的内容檔案Uri uri = new Uri("/Subfolder/ContentFile.xaml", UriKind.Relative);

                                          特點:不用協定   

一、加載本項目的圖檔 WPF引入了統一資源辨別Uri(Unified Resource Identifier)來辨別和通路資源。 其中較為常見的情況是用Uri加載圖像。Uri表達式的一般形式為:協定+授權+路徑 協定:pack:// 授權:有兩種。一種用于通路編譯時已經知道的檔案,用application:/// 一種用于通路編譯時不知道、運作時才知道的檔案,用siteoforigin:///

一般用逗号代替斜杠,也就是改寫作application:,,,和pack:,,, 路徑:分為絕對路徑和相對路徑。一般選用相對路徑,普适性更強

下面,我們舉一個簡單的例子: pack://application:,,,/images/my.jpg 當然,WPF預設Uri設定有pack://application:,,,,是以我們也可以直接将其寫作:/images/my.jpg

後邊寫例子程式時,為了讓讀者更好的了解Uri,我們都采用完整的Uri寫法。 下面在講講裝載圖檔的兩種方式,一種用XAML引用資源,一種用代碼引用資源。

用XAML引用資源:

<Image Source=

"pack://application:,,,/images/my.jpg"

/>

 也可以這樣

<Image Source=

"/images/my.jpg"

/>

  用代碼引用資源:

Image img;

img.Source=

new

BitmapImage(

new

Uri(

"pack://application:,,,/images/my.jpg"

),UriKind.Relative);

  也可以直接使用代碼中引用圖檔資源

image2.Source =

new

BitmapImage(

new

Uri(

"/images/my.jpg"

, UriKind.Relative));

  二、WPF 調用資源圖檔

imagePath =

"pack://application:,,,/Solution;component/Properties/../images/star/my.jpg"

;

imageBrush.ImageSource =

new

BitmapImage(

new

Uri(imagePath, UriKind.RelativeOrAbsolute));

    三、WPF引用外部項目資源的方法 WPF中如果你使用的資源檔案不是本程式集的,是另外的程式集,就可以這樣做: 1.引用要用的程式集,pack://application:,,,/程式集名稱;component/路徑 ,其中pack://application:,,,可以省略 示例:

<Image Source=

"pack://application:,,,/Skin;component/image/you.png"

/>

 或者

<Image Source=

"/Skin;component/image/you.png"

/>

四、使用SiteOfOrigin

imgContent.Source =

new

BitmapImage(

new

Uri(

"pack://SiteOfOrigin:,,,/images/my.jpg"

));