1. 程式人生 > 實用技巧 >深入淺出WPF-10.Resource(資源)

深入淺出WPF-10.Resource(資源)

資源

物件級資源:每個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,,,[/程式集名稱;][可選版本號;][資料夾名稱/]檔名稱

或者直接簡化成

[資料夾名稱/]檔名稱