wpf多程序集之间共享资源字典--CLR名称空间未定义云云
以下介绍如何创建可用于在多个程序集之间共享的资源字典
1.新建Wpf自定义控件库,名称为MyContorlLib,项目资源结构图如下:

2.打开Themes文件夹中的Generic.xaml文件,在根元素中添加如下名称空间:
xmlns:local="clr-namespace:MyContorlLib"
因为待会儿要用到该名称空间下的一个类CustomControl1(系统自动生成的,也可以自己创建)
3.在资源字典中添加资源:
- <LinearGradientBrush x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:CustomControl1}, ResourceId=haha}" StartPoint="0,0" EndPoint="0,1">
- <GradientStop Color="Blue" Offset="0"></GradientStop>
- <GradientStop Color="White" Offset="0.5"></GradientStop>
- <GradientStop Color="Red" Offset="0.7"></GradientStop>
- <GradientStop Color="Firebrick" Offset="1"></GradientStop>
- </LinearGradientBrush>
<LinearGradientBrush x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:CustomControl1}, ResourceId=haha}" StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="Blue" Offset="0"></GradientStop>
<GradientStop Color="White" Offset="0.5"></GradientStop>
<GradientStop Color="Red" Offset="0.7"></GradientStop>
<GradientStop Color="Firebrick" Offset="1"></GradientStop>
</LinearGradientBrush>
重点在这里,注意看x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:CustomControl1}, ResourceId=haha}",可以发现它跟我们在Window.Resources或Application.Resources或其他元素中定义的x:Key的方式略有区别;
解释一下:
x:Key不再是字符串,而是一个更加复杂的类型ComponentResourceKey,它有三个属性TypeInTargetAssembly、ResourceId、Assembly,我们这里用到了前面两个;
TypeInTargetAssembly属性需要接收一个Type类型的值,我们赋予{x:Type local:CustomControl1};
ResourceId需要接收一个字符串,名字随便取,这里赋予haha(没有什么含义,有含义最好)
这样就为资源元素定义好了Key,下面就是在另一个程序集中应用它了.
略述步骤如下:
1.创建WPF项目,名称为WpfAPP;
2.创建一个Window窗口,名称为resTest;
3.添加程序集引用,具体是右击"引用"-->"添加"-->"项目"-->"MyControlLib"-->"确定"
4.打开resTest.xaml文件,向根元素添加名称空间:
xmlns:res="clr-namespace:MyContorlLib;assembly=MyControlLib"
注意与上面的写法略有不同(具体的原因我也不好解释,好像上面的名称空间也可以写成这样)
5.添加一个Label元素,为其Background属性赋值如下:
Background="{DynamicResource ResourceKey={ComponentResourceKey TypeInTargetAssembly={x:Type res:CustomControl1}, ResourceId=haha}}"
这里我们用到了原先为资源元素定义好的Key,是个ComponentResourceKey,包含两个必要的属性.
6.工作完成.
还有一步额外但是很有趣的操作:
1.打开CustomControl1.cs文件;
2.添加一个静态公开的ComponentResourceKey类型的属性:
- public static ComponentResourceKey LinearGradientColorBrushKey {
- get { return new ComponentResourceKey(typeof(CustomControl1),"haha"); }
- }
public static ComponentResourceKey LinearGradientColorBrushKey {
get { return new ComponentResourceKey(typeof(CustomControl1),"haha"); }
}
3.这样我们也可以获得资源,我们重新为Label的Background属性赋值:
Background="{DynamicResource ResourceKey={x:Static Member=res:CustomControl1.LinearGradientColorBrushKey}}"
4.也有相同的效果.
下面来解决在这个过程中可能遇到的问题:
Undefined CLR namespace. The 'clr-namespace' URI refers to a namespace 'MyControlLib' that is not included in the assembly.
也就是“未定义的CLR名称空间,......”类的错误
其实如果按照上面说的做逻辑上没有错误,但是VS或Blend总要提醒本错误,原因就是:
我们没有“重新构建”或“重新生成”MyControlLib程序集,重新生成一下试试吧,会成功的。
至于为何要“重新生成”,我想用不着我多解释把吧,自己想想也就明白了。
wpf多程序集之间共享资源字典--CLR名称空间未定义云云的更多相关文章
- wpf 在引用外部的资源字典
启动的APP.xaml
- WPF学习笔记-使用自定义资源字典(style)文件
1.添加资源字典文件style.xmal 2.在资源字典中添加自定义style等 <ResourceDictionary xmlns="http://schemas.microsoft ...
- WPF(MVVM) 利用资源字典实现中英文动态切换
1.首先新建两个字典文件en-us.xaml.zh-cn.xaml.定义中英文的字符串在这里面. 2.将两个资源字典添加到App.xaml中,这里注意下,因为两个字典中有同样字符,如果没有动态更改,默 ...
- python基础之类和对象、对象之间的交互、类名称空间与对象/实例名称空间
一 面向对象初识 Python要么是面向过程要么是面向对象. 概念及优缺点: 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东 ...
- k8s核心资源之:名称空间(ns)
简介 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或者用户组. 常见的pod.service.replicaSet和deployment等都是属于某一个namespac ...
- (转载)资源字典(Pro WPF 学习)
原地址:http://www.cnblogs.com/yxhq/archive/2012/07/09/2582508.html 1.创建资源字典 下面是一个资源字典(AppBrushes.xaml), ...
- 【WPF学习】第三十五章 资源字典
如果希望在多个项目之间共享资源,可创建资源字典.资源字典只是XAML文档,除了存储希望使用的资源外,不做其他任何事情. 一.创建资源字典 下面是一个资源字典示例,它包含一个资源: <Resour ...
- Prism 4 文档 ---第10章 Silverlight和WPF之间共享代码
本主题帮助你理解来自Prism的多目标和它的优缺点.多目标的代码针对两个不同的平台有大致相同的代码库.这允许同时保持代码尽可能多一样能够产生针对两种不同技术的二进制文件.在这种情况下,本节介绍 ...
- 同一个POD中默认共享哪些名称空间
如果通过POD的形式来启动多个容器那么它们的名称空间会是共享的么,所以我这里讨论是在默认情况下同一个POD的不同容器的哪些名称空间是打通的.这里先说一下结论,共享的是UTS.IPC.NET.USER. ...
随机推荐
- ArcGIS Server Q&A
持续更新.. 一. AGS Server10发布mobile data access 出现错误 问题描述: "ArcGIS Server: Configuration <name> ...
- 介绍一下except的用法和作用?
Python的except用来捕获所有异常,因为Python里面的每次错误都会抛出一个异常,所以每个程序的错误都被当作一个运行时错误.
- F110 参数保存和重新运行录屏
**初始界面回车 PERFORM frm_dynpro USING ' 'X'. PERFORM frm_dynpro USING '' 'BDC_CURSOR' 'F110V-LAUFD'. PER ...
- python常用模块——os模块
python编程时,经常和文件.目录打交道,这就离不开os模块,os模块包含普遍的操作系统功能,与具体的平台无关,列举一些常用的命令. 1.os.name:字符串指示你正在使用的平台.windows是 ...
- 我的npm笔记
本文记录一些npm的使用技巧,主要包括自己常用的命令,做个备忘. NPM 是什么? NPM是NodeJS的包管理工具,现在已经进一步发展,致力于为很多其他平台提供包管理工具,其核心思想就是让包的安装更 ...
- fastReport 绑定DataBand数据源后还是打印出一条数据
升级了fastreport到v2018后,打印出现问题,datasource是多条数据,可打印出来始终只显示第一条 DataBand dataBand = report.FindObject(&quo ...
- P4340 [SHOI2016]随机序列
题目 P4340 [SHOI2016]随机序列 思维好题 做法 是否觉得水在于你是否发现加减是会抵消的,所以我们只用考虑乘的部分 一块乘只能前面无号(也就是前缀形式)才统计,所以用线段树维护区间前缀乘 ...
- 快乐学习 Ionic Framework+PhoneGap 手册1-5 {IO开关}
当然,即使努力了也没做成,至少你也有收获,因为你知道自己以后可以避开这个坑. 这是一个"IO"开关,请看效果图和代码,下一节,说明,数据交换 Index HTML Code < ...
- matplotlib模块之plot画图
关于matplotlib中一些常见的函数,https://www.cnblogs.com/TensorSense/p/6802280.html这篇文章讲的比较清楚了,https://blog.csdn ...
- 异常:没有找到本地方法库,java.lang.UnsatisfiedLinkError: no trsbean in java.library.path
1.问题描述 迁移环境中遇到这个问题 : Fri Apr 20 15:22:31 CST 2018, Exception:500004___-500004,没有找到本地方法库,java.lang.Un ...