深入淺出WPF-10.Resource(資源)
阿新 • • 發佈:2020-07-30
資源
物件級資源:每個WPF的介面元素都有一個名為Resources的屬性,這個屬性繼承自FrameworkElement類,其型別為ResourceDictionary,採用鍵值對的形式儲存資源,當需要某個資源時,使用鍵值的形式索引到資源。資源儲存時為object型別,所以在使用時先要對資源物件進行型別轉換,XAML編譯器能夠根據標籤的特性自動識別資源型別,但是在C#程式碼中,就需要通過程式碼我們自己實現轉換。
<Window x:Class="CommandDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="MainWindow" Height="Auto" Width="Auto" SizeToContent="WidthAndHeight"> <Window.Resources> <ResourceDictionary> <sys:String x:Key="str" >你好啊,程式碼</sys:String> </ResourceDictionary> </Window.Resources> <Grid> <StackPanel Width="300" Name="stackPanel"> <Button x:Name="button1" Margin="5" Content="Send Command"/> <TextBox x:Name="txtbox1" Margin="5" Height="100" Text="{StaticResource str}"/> </StackPanel> </Grid> </Window>
private void Window_Loaded(object sender, RoutedEventArgs e) { //查詢指定資源,沒有的話就會沿著元素樹向上一級控制元件查詢,如果連頂層的也沒有,就會查詢Application.Resources中進行查詢,如果還是沒有找到,就會拋異常 string str = (string)this.FindResource("str"); System.Console.WriteLine(str); //明確地知道資源放在了哪個資源字典中,就可以直接檢索 string str2 = (string)this.Resources["str"]; System.Console.WriteLine(str2); }
動態資源,是指在程式執行過程中任然會去訪問資源
靜態資源,程式載入記憶體時,對資源一次性的使用,之後就不再去訪問資源了,顯然是在程式初始化時使用一次,之後就不再改變了。
程式集資源(二進位制資源):為了不把資源字典裡的資源和應用程式內嵌的資源混淆,我們明確應用程式內嵌資源為程式集資源或者二進位制資源,稱資源字典裡的資源為WPF資源或者物件資源。
如果我們新增的資源時字串而非檔案,我們可以使用程式屬性名稱空間,Resources.resx檔案,這個一般我們可以用作語言包。如果我們新增的資源時檔案,我們則將檔案直接拷貝到工程檔案的資料夾中,然後設定檔案的屬性為:
如果不希望按照資源的方式訪問外部檔案,我們設定如下:
二進位制資源的訪問(Pack URL),格式如下:
pack://applicaiton,,,[/程式集名稱;][可選版本號;][資料夾名稱/]檔名稱
或者直接簡化成
[資料夾名稱/]檔名稱