一、WPF支持程序級資源(也稱為二進制資源),和對象級資源。
二、程序級資源 之 外部文件
-
為什么要將外部文件轉成程序資源:因為外部文件與程序主體分離,有可能丟失或者損壞。所以編譯器允許我們把外部文件編譯進程序主體,成為程序主體不可分割的一部分。
- 添加方式:程序級資源可以添加圖片、音頻、視頻等文件,添加方法是僅需簡單的將其加入項目即可。
-
訪問方式:
① 完整的Pack URI路徑:pack://application,,,[/程序集名稱;][可選版本號;][文件夾名稱/]文件名稱
② 因為 pack://application,,,一般可以省略,而[/程序集名稱;][可選版本號;]常使用缺省值,故縮略的寫法:[文件夾名稱/]文件名稱
注:Pack URI使用正斜線(/)表示路徑
- 使用方式:
① XAML中使用資源:
1 <Image Source="Resources/Img/alarm_bone.png" Width="65" Height="65"/> 2 <Image Source="pack://application:,,,/Resources/Img/alarm_bone.png" Width="65" Height="65"/>
② 后台代碼中使用資源:
1 Uri imgUri = new Uri(@"Resources/Img/alarm_bone.png",UriKind.Relative); 2 Uri imgUri = new Uri(@"pack://application:,,,/Resources/Img/alarm_bone.png",UriKind.Absolute); 3 img.Source = new BitmapImage(imgUri);
注:使用完整寫法意味着絕對路徑,代表根目錄的/不能省略,絕對路徑的UriKind必須是Absolute;
使用縮略寫法意味着相對路徑,代表根目錄的/可以省略,相對路徑的UriKind必須是Relative。
三、程序資源 之 資源文件
程序級資源除了圖片、音頻文件之外,還可以添加的資源是字符串,利用程序中的Properties名稱空間中的Resource.resx資源文件。
-
Resource.resx文件內容是鍵值對的形式;
-
為了讓編譯器能夠訪問這個類,一定把Resource.resx的訪問級別由Internal改為Public;
- Properties名稱空間中的各個文件:
1. AssemblyInfo.cs:查看軟件的版本信息
2. Resource.resx:資源文件,里面定義了你程序需要的字符串
3. Resources.Designer.cs:根據resx的內容,自動生成的C#后台代碼
4. Setting.settings:可以編寫屬性、方法;通常用於窗口的某些設置、綁定
5. Setting.Designer.cs:根據settings的內容,自動生成的C#后台代碼
- 使用方式
① XAML中使用資源文件
1 <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 2 <TextBlock x:Name="txtblock" Text="{x:Static prop:Resources.UserName}"/> 3 </StackPanel>
注:Resource.resx經過編譯變成Properties名稱空間中的Resource類,那么就可以使用x:Static標簽擴展來訪問資源(因為XAML中是不能編寫邏輯代碼的,所以使用x:Static來引用對應xaml.cs文件中寫的公共靜態屬性值(或字段));Properties名稱空間映射到XAML的命名空間是prop
② C#后台代碼使用資源文件
1 this.txtblock.Text = Properties.Resources.Password;
-
優勢:便於程序的國際化、本地化(方便切換顯示的語言)