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>

时间: 2024-10-24 04:09:55

WPF加载程序集中字符串资源的相关文章

WPF加载HTML、WPF与JavaScript交互

目录 一.WebBrowser加载远程网页 二.WebBrowser加载本地网页,注:不可以加载本地样式CSS和脚本JS文件 三.WebBrowser隐藏网页的JavaScript错误 四.网页屏蔽鼠标右键.Ctrl+N.Shift+F10.F11.F5刷新.退格键 五.WPF程序与网页JavaScript交互 六.创建服务器,提供数据接口.Script.CSS文件 一.WebBrowser加载远程网页 wbrExam.Source = new Uri("http://cnblogs.com/s

引导加载程序之争:了解 LILO 和 GRUB PCV

从普通的桌面用户到 Linux? 系统管理员,大部分 Linux 用户都使用过一种名为引导加载程序的工具.此类工具的不同变种会提供不同层次的支持和功能.在很多情况下,Linux 发行版默认安装的引导加载程序并不总是适合需要:每个引导加载程序的默认设置也是如此.在本文中,Laurence Bonney 讨论了两个流行的引导加载程序 -- LILO 和 GRUB -- 的优点和缺点,并建议了很多配置,以充分发掘机器的潜力. 1评论: Laurence Bonney ([email protected

正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码

当我在窗体初始化的时候,调用了一个外部的dll,它就不知什么原因的 抛出一个“正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码”的异常,程序就卡掉了,在网上查了查,相关说明如下: .NET2.0中增加了42种非常强大的调试助手,MDA.Loaderlock 是其中之一.Loaderlock检测在一个拥有操作系统loader lock的线程上运行托管代码的情况.这样做有可能会引起死锁,并且有可能在操作系统加载器初始化DLL前被使用. 大致理解:就

WPF加载Winform窗体时 报错:子控件不能为顶级窗体

一.wpf项目中引用WindowsFormsIntegration和System.Windows.Forms 二.Form1.Designer.cs 的 partial class Form1 设置为:public partial class Form1 三.代码如下: XXXX.Form1 Zhuwindow = new XXXX.Form1(); Zhuwindow.TopLevel = false; Zhuwindow.FormBorderStyle = System.Windows.Fo

Win7下安装双系统Centos,并修复Centos引导加载程序安装在U盘上的问题

1.使用U盘安装Centos时,磁盘分区划分要注意:系统(包含Win7)只能4个主分区,所以只能在删除一个主分区或者在扩展分区的空闲分区内建立目录. 2.Centos在安装步骤的最后,引导加载程序的选项只有“安装在U盘”一项,注:不可轻易选择安装在MBR上,会覆盖掉Win7系统的引导加载程序. 所以我们先选择将引导加载程序安装在U盘上,然后再修复. 3.Centos修复grub启动加载程序 参考并转自:http://blog.csdn.net/llhwin2010/article/details

引导加载程序之争: LILO 和 GRUB

在不考虑他们的工作或专业情况下,所有 Linux 用户都会使用的是哪个工具?引导加载程序.通过本文了解引导加载程序的工作原理,认识两个流行的引导加载程序 LILO(LInux LOader)和 GNU GRUB(GRand Unified Boot loader), 并研究两者各自的优点和缺点. 什么是引导加载程序? 最简单地讲,引导加载程序(boot loader) 会引导操作系统.当机器引导它的操作系统时,BIOS 会读取引导介质上最前面的 512 字节(即人们所知的 主引导记录(maste

JavaScript之:模块加载程序的历史与背景

原文:History and Background of JavaScript Module Loaders 作者:Elias Carlston 翻译:leotso 介绍 Web 应用程序的应用程序逻辑不断从后端移到浏览器端.但是,由于富客户端 JavaScript 应用程序的规模变得更大,它们遇到了类似于多年来传统应用所面临的挑战:共享代码以便重用,同时保持架构的隔离分层,并且足够灵活以便于轻松扩展. 这些挑战的一个解决方案是开发 JavaScript 模块和模块加载系统.这篇文章将着重于比较

正试图在 os 加载程序锁内执行托管代码

正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码... 当我在窗体初始化的时候,调用了一个外部的dill时,它就不知什么原因的 抛出一个"正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码"的异常,程序就卡掉了,在网上查了查,相关说明如下: .NET2.0中增加了42种非常强大的调试助手,MDA.Loaderlock 是其中之一.Loaderlock检测在一个拥有操作系统loader

检测到 LoaderLock:DLL&quot;XXXX&quot;正试图在OS加载程序锁内执行

解决方法: ctrl+D+E或alt+ctl+e或使用菜单调试——>异常——>异常窗口——>Managed Debugging Assistants——>去掉LoaderLock选项. 参考资料: 不辣的peter中国版的博客:Loaderlock was detected 无痕客的博客:ESRI的地图控件和DEV控件存在冲突,造成调试中断无法通过 悟道人生的博客:检测到 LoaderLock Message Microsoft.DirectX.dll”正试图在 OS 加载程序锁内