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中新增這個資源字典的引用:
<Applicationxmlns="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中直接載入:
<Applicationxmlns="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>