wpf多程序集之间共享资源字典--CLR名称空间未定义云云

wpf多程序集之间共享资源字典--CLR名称空间未定义云云

2023年7月19日发(作者:)

wpf多程序集之间共享资源字典--CLR名称空间未定义云云以下介绍如何创建可⽤于在多个程序集之间共享的资源字典1.新建Wpf⾃定义控件库,名称为MyContorlLib,项⽬资源结构图如下:2.打开Themes⽂件夹中的⽂件,在根元素中添加如下名称空间:xmlns:local="clr-namespace:MyContorlLib"因为待会⼉要⽤到该名称空间下的⼀个类CustomControl1(系统⾃动⽣成的,也可以⾃⼰创建)3.在资源字典中添加资源: 重点在这⾥,注意看x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:CustomControl1}, ResourceId=haha}",可以发现它跟我们在ces或ces或其他元素中定义的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.打开⽂件,向根元素添加名称空间: 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.打开⽂件;2.添加⼀个静态公开的ComponentResourceKey类型的属性: public static ComponentResourceKey LinearGradientColorBrushKey { get { return new ComponentResourceKey(typeof(CustomControl1),"haha"); } }3.这样我们也可以获得资源,我们重新为Label的Background属性赋值:Background="{DynamicResource ResourceKey={x:Static Member=res:GradientColorBrushKey}}"4.也有相同的效果.下⾯来解决在这个过程中可能遇到的问题:Undefined CLR namespace. The 'clr-namespace' URI refers to a namespace 'MyControlLib' that is not included in the assembly.也就是“未定义的CLR名称空间,......”类的错误其实如果按照上⾯说的做逻辑上没有错误,但是VS或Blend总要提醒本错误,原因就是:我们没有“重新构建”或“重新⽣成”MyControlLib程序集,重新⽣成⼀下试试吧,会成功的。⾄于为何要“重新⽣成”,我想⽤不着我多解释把吧,⾃⼰想想也就明⽩了。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689723203a281185.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信