WPF 的资源生成顺序

今天遇到了一个特别奇葩的问题,我编写了一个UserControl,并出于自己的需要在资源文件中编写了对应的Style,此Style中又包含一个ControlTemplate,我随手把此ControlTemplate写在了Style的下面,然后就一直报错。错误名称为:

Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.Windows.FrameworkTemplate'.

顾名思义,就是不能把一个叫什么'MS.Internal.NamedObject'的对象转换成Frameword的模板。喵喵喵?几个意思?

我开始各种百度google,始终不得其解。头开始以为是绑定出问题了,后来又以为是自定义的弹出窗加绑定有问题,但修改之后问题始终存在。

我最后把所有包含绑定的内容注释掉,运行,存在。把前台绑定的内容注释掉,运行,存在。把前台控件所用的样式去掉,运行,咦,居然成功了,难道问题出在样式身上?

我观察了一下样式,没啥问题,就把自己写的样式替换为另一个之前早就存在的样式,运行,成功。嗯。。。可能真的是样式有问题,可是这个样式本来就是复制粘贴的,只对ControlTemplate做了修改,把ControlTemplate注释掉,运行,成功,解除注释,失败。。好的吧,那把这个自定义的Template替换为别的已存在的Template,成功,难道是Template中不能绑定?把Template中的所有内容注释掉,运行,依然失败。。。。emmm,难道是名字起的风水不好?换个名字,依然失败。。。最后我灵机一动,把这个ControlTemplate和别的ControlTemplate放在一起,运行,居然成功了。so。。。。。应该是资源加载顺序的问题,资源文件也是从上往下加载的,当需要这个Template的时候,这个Template还没有生成,就导致了我调用的Template名字只是一个字符串,所以导致了转换失败的问题。至此,真相大白。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值