1. 程式人生 > >WPF載入程式集中字串資源

WPF載入程式集中字串資源

原文: WPF載入程式集中字串資源

 

WPF資源

WPF資源使用其實的也是resources格式嵌入資源,預設的資源名稱為"應用程式名.g.resources",不過WPF資源使用的pack URI來訪問資源。

新增影象資源 

在解決方案資源管理器中包含一個影象資源(如data\img.png)的時候,預設是輸出為資原始檔的(生成操作=Resource),編譯的時候作為資源編譯到程式集中;

當在img.png的屬性頁中把"生成操作"屬性設定為"內容",同時設定"複製到輸出目錄"屬性為"如果較新則複製",則輸出為內容檔案,data\img.png會複製一份到程式集輸出目錄,這樣無需編譯就可以修改資原始檔了。

此圖片資源的uri連結為"/data/img.png",如<Image Name="image3" Source="/data/img.png" />

在資源字典中使用字串

ResouceDictionary中可以新增各種型別資源,使用如下方法來儲存字串到資源字典中。資源字典預設情況下會被編譯成baml儲存到"應用程式名.g.resources"資源中,也可以修改輸出為內容檔案方法同上。

資源字典的xaml程式碼:

<ResourceDictionary 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">
    <sys:String x:Key="rdstring1">resource dictionary string.</sys:String>
</ResourceDictionary>

 

別忘了在app.xaml中新增這個資源字典的引用:

<Application 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MySampleApp1.app">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Dictionary1.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

 

xaml程式碼中使用此字串:

<Label Content="{StaticResource rdstring1}" Name="label8" />

 

程式碼中使用此字串:

string msg= (string)Application.Current.FindResource("rdstring1");
MessageBox.Show(msg);

 

 轉載:http://www.cnblogs.com/xwing/archive/2009/05/31/1493256.html

先準備一個WPF資源類庫:新建一個程式集,預設建立的東西都刪掉,新增上面的資源字典dictionary1.xaml到類庫中,編譯為ClassLibrary1.dll,使用Reflector工具檢查發現這個類庫中資源名為:ClassLibrary1.g.resources,內容為dictionary1.baml,ok準備完畢。 

主程式集中無需引用這個資源庫,只需要放在同一個輸出目錄下即可,在程式碼中載入此資源併合併到Application中。 

載入程式碼(相對URI): 

var uri = new Uri("/ClassLibrary1;component/Dictionary1.xaml", UriKind.Relative);
var res = (ResourceDictionary)Application.LoadComponent(uri);
Application.Current.Resources.MergedDictionaries.Add(res);

 

載入程式碼(絕對URI): 

var uri = new Uri("pack://application:,,,/ClassLibrary1;component/Dictionary1.xaml");
ResourceDictionary res = new ResourceDictionary {Source = uri};
Application.Current.Resources.MergedDictionaries.Add(res);

 

在XAML中直接載入:

複製程式碼 <Application 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MySampleApp.app">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/ClassLibrary1;component/Dictionary1.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>