WPF在后台代码定义ResourceDictionary资源字典

WPF在后台代码定义ResourceDictionary资源字典

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

WPF在后台代码定义ResourceDictionary资源字典在 WPF 中的 ResourceDictionary 资源字典⼤部分都是在 XAML ⾥⾯定义的,但是在 C# 代码定义⼀个资源字典也是可⾏的,只是写起来有点诡异在 CSharp 后台代码⾥⾯给 WPF 定义资源字典需要重新创建⼀个类,让这个类继承 ResourceDictionary 如以下代码 public class Foo : ResourceDictionary { }然后在构造函数⾥⾯加⼊测试的代码,添加⼀个颜⾊作为资源 public class Foo : ResourceDictionary { public Foo() { Add("Foo", ); } }在后台代码添加的资源需要在被加⼊到使⽤之前,完成资源的添加,因此建议写在构造函数⾥⾯使⽤这个在后台代码定义的资源字典有两个⽅法,⼀个是在 XAML 引⽤,另⼀个是在后台代码添加在 XAML 引⽤的逻辑如下 需要注意的是在 C# 后台定义的 WPF 资源字典不能通过 Url 的⽅式引⽤,⽽是需要通过实例的⽅式。可以选择创建实例或引⽤资源的⽅式,如上⾯代码是创建实例在上⾯代码定义了⼀个测试使⽤的代码,尝试使⽤ StaticResource Foo 静态资源,这个静态资源是定义在后台代码的资源字典的,运⾏代码可以看到能绑定上⽽在后台代码添加引⽤的⽅法如下 (new Foo());这就是在后台定义资源字典的⽤法了在后台代码定义资源字典还有⼀个有趣的⿊科技是重新返回资源的值⼤概代码逻辑如下 public class Foo : ResourceDictionary { public Foo() { Add("Foo", ); } protected override void OnGettingValue(object key, ref object value, out bool canCache) { value = ; canCache = true; } }在这个资源字典⾥⾯定义了 Foo 是灰⾊,但是在 OnGettingValue ⽅法⾥⾯返回的是蓝⾊。因此在 XAML ⾥⾯绑定静态资源的时候,将会显⽰的实际颜⾊是蓝⾊另外只要资源⾥⾯的值不是 null 空,那么都会进⼊ OnGettingValue ⽅法去读取实际返回的值,⽽实际返回值是 object 类型,意味着可以愉快更改返回类型 public Foo() { Add("Foo", null); // 传⼊ null 将不会进⼊ OnGettingValue ⽅法 } protected override void OnGettingValue(object key, ref object value, out bool canCache) { value = ; canCache = true; }如以下代码,传⼊的是 object 但是在 OnGettingValue ⽅法可以返回颜⾊ public Foo() { Add("Foo", new object()); } protected override void OnGettingValue(object key, ref object value, out bool canCache) { value = ; canCache = true; }利⽤这个有趣的科技也可以⽤来做多语⾔或者主题⾊等,只是这个⽅法没有⾃动的更新值机制本⽂代码放在欢迎⼩伙伴访问⽽在 XAML 定义内容,同时⽀持对应的后台代码也可以,但是没有什么意义,⾄少我还不知道这个功能有什么作⽤做法就是和上⾯代码⼀样,定义⼀个继承 ResourceDictionary 的类,如下⾯代码 public class ResourceJainahijainenelHuceenukur : ResourceDictionary { public ResourceJainahijainenelHuceenukur() { (); } protected override void OnGettingValue(object key, ref object value, out bool canCache) { (); ingValue(key, ref value, out canCache); } }接着创建⼀个资源字典,创建之后修改 ResourceDictionary 为刚才创建的类名 此时就完成了,依然使⽤的时候使⽤ url 的形式但是这样做我想不到有多少意义,因为 OnGettingValue ⽅法尽管重写了,但是实际不会被调⽤进⼊本⽂代码放在欢迎⼩伙伴访问我搭建了⾃⼰的博客 欢迎⼤家访问,⾥⾯有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是⼀旦发布了就不再更新如果在博客看到有任何不懂的,欢迎交流,我搭建了 欢迎⼤家加⼊如有不⽅便在博客评论的问题,可以加我 QQ 2844808902 交流本作品采⽤进⾏许可。欢迎转载、使⽤、重新发布,但务必保留⽂章署名(包含链接: ),不得⽤于商业⽬的,基于本⽂修改后的作品务必以相同的许可发布。如有任何疑问,请与我。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689723180a281183.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信