xaml继承问题,跨程序集就识别不了资源,有什么解决方案么?

慧眼识狗熊 2017-08-31 09:06:12
有个外放的dll里有个usercontrol界面,但其中的一些事件调用方可能要继承重写。

但问题是,继承下来的类在同一个程序集里没问题,跨程序集一运行就报错:不识别资源,但愣是没找到相关资源到底在哪设置。
引用后直接new Usercontrol1()当然也是没问题的,抓瞎了。

一个简单的示例,不知道这个是不是wpf就是限制死的还是有方法绕过,高手,就等你了。


...全文
340 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
慧眼识狗熊 2019-09-23
  • 打赏
  • 举报
回复
引用 12 楼 guanhuaming 的回复:
你好。你上面的贴子说的是“ 不需要Extension,直接加个内部函数就行”。请问一下这个内部函数是?


LoadViewFromUri
guanhuaming 2019-09-18
  • 打赏
  • 举报
回复
引用 10 楼 慧眼识狗熊 的回复:
[quote=引用 9 楼 guanhuaming 的回复:] 请教一下楼主,是如何解决的?非常感谢!
参见Stack Overflow链接里的方案,不要调用默认的InitializeComponent,写个公用的方法LoadViewFromUri,主动调用下即可。 //InitializeComponent(); this.LoadViewFromUri("/ClassLibrary1;component/myusercontrol.xaml"); 好久没登录,过去几个月了,可能对你已经没啥用了。[/quote] 你好。你上面的贴子说的是“ 不需要Extension,直接加个内部函数就行”。请问一下这个内部函数是?
guanhuaming 2019-08-31
  • 打赏
  • 举报
回复
非常感谢,对我还是非常有用的。
慧眼识狗熊 2019-06-19
  • 打赏
  • 举报
回复
引用 9 楼 guanhuaming 的回复:
请教一下楼主,是如何解决的?非常感谢!
参见Stack Overflow链接里的方案,不要调用默认的InitializeComponent,写个公用的方法LoadViewFromUri,主动调用下即可。 //InitializeComponent(); this.LoadViewFromUri("/ClassLibrary1;component/myusercontrol.xaml"); 好久没登录,过去几个月了,可能对你已经没啥用了。
guanhuaming 2019-01-28
  • 打赏
  • 举报
回复
引用 7 楼 慧眼识狗熊 的回复:
[quote=引用 5 楼 duanzi_peng 的回复:] [quote=引用 3 楼 small21 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 类继承不了Xaml,只能继承后台代码类啊。
我确实只要继承UserControl1的后台代码,给其他人重写几个响应函数而已,但调用dll后继承就报错了。 怎么实现呢?[/quote] 参见:https://stackoverflow.com/questions/7646331/the-component-does-not-have-a-resource-identified-by-the-uri 中的使用Extension扩展方式。注意 只对同一程序集中的类有效。[/quote] 问题解决, 这个就是解决程序集外继承的。我都有源码的不需要Extension,直接加个内部函数就行了。 觉得这个改法应该是LoadComponent的内部实现并跳过了类型判断。 去查看了下微软的LoadComponent(Object component, Uri resourceLocator)源码,果然是有个程序集判断的,微软限制程序集外继承不知道是什么原因。 if (bamlStream == null || bamlStream.Assembly != component.GetType().Assembly) { throw new Exception(SR.Get(SRID.UriNotMatchWithRootType, component.GetType( ), resourceLocator)); }[/quote] 请教一下楼主,是如何解决的?非常感谢!
ilikeff8 2017-09-01
  • 打赏
  • 举报
回复
xmal里绑定正确的后台类名了不 x:Class="CANConfiger.View.Dialog.CheckUpdateUserControl"
慧眼识狗熊 2017-09-01
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
类继承不了Xaml,只能继承后台代码类啊。
我确实只要继承UserControl1的后台代码,给其他人重写几个响应函数而已,但调用dll后继承就报错了。 怎么实现呢?
exception92 2017-09-01
  • 打赏
  • 举报
回复
类继承不了Xaml,只能继承后台代码类啊。
慧眼识狗熊 2017-09-01
  • 打赏
  • 举报
回复
有没有人来聊个天啊,@版主大人求帮助 ~~
exception92 2017-09-01
  • 打赏
  • 举报
回复
引用 7 楼 small21 的回复:
[quote=引用 5 楼 duanzi_peng 的回复:] [quote=引用 3 楼 small21 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 类继承不了Xaml,只能继承后台代码类啊。
我确实只要继承UserControl1的后台代码,给其他人重写几个响应函数而已,但调用dll后继承就报错了。 怎么实现呢?[/quote] 参见:https://stackoverflow.com/questions/7646331/the-component-does-not-have-a-resource-identified-by-the-uri 中的使用Extension扩展方式。注意 只对同一程序集中的类有效。[/quote] 问题解决, 这个就是解决程序集外继承的。我都有源码的不需要Extension,直接加个内部函数就行了。 觉得这个改法应该是LoadComponent的内部实现并跳过了类型判断。 去查看了下微软的LoadComponent(Object component, Uri resourceLocator)源码,果然是有个程序集判断的,微软限制程序集外继承不知道是什么原因。 if (bamlStream == null || bamlStream.Assembly != component.GetType().Assembly) { throw new Exception(SR.Get(SRID.UriNotMatchWithRootType, component.GetType( ), resourceLocator)); }[/quote] 源码都那样写的,用我们的话说就是“龟腚”吧。
慧眼识狗熊 2017-09-01
  • 打赏
  • 举报
回复
引用 5 楼 duanzi_peng 的回复:
[quote=引用 3 楼 small21 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 类继承不了Xaml,只能继承后台代码类啊。
我确实只要继承UserControl1的后台代码,给其他人重写几个响应函数而已,但调用dll后继承就报错了。 怎么实现呢?[/quote] 参见:https://stackoverflow.com/questions/7646331/the-component-does-not-have-a-resource-identified-by-the-uri 中的使用Extension扩展方式。注意 只对同一程序集中的类有效。[/quote] 问题解决, 这个就是解决程序集外继承的。我都有源码的不需要Extension,直接加个内部函数就行了。 觉得这个改法应该是LoadComponent的内部实现并跳过了类型判断。 去查看了下微软的LoadComponent(Object component, Uri resourceLocator)源码,果然是有个程序集判断的,微软限制程序集外继承不知道是什么原因。 if (bamlStream == null || bamlStream.Assembly != component.GetType().Assembly) { throw new Exception(SR.Get(SRID.UriNotMatchWithRootType, component.GetType( ), resourceLocator)); }
慧眼识狗熊 2017-09-01
  • 打赏
  • 举报
回复
引用 4 楼 ilikeff8 的回复:
xmal里绑定正确的后台类名了不 x:Class="CANConfiger.View.Dialog.CheckUpdateUserControl"
xaml就是默认的usercontrol1,不是你想的问题,class1都没问题的,就是跨程序集找资源的问题,xaml和继承类名不匹配,导致同一个程序集可以,跨程序集不行。
exception92 2017-09-01
  • 打赏
  • 举报
回复
引用 3 楼 small21 的回复:
[quote=引用 2 楼 duanzi_peng 的回复:] 类继承不了Xaml,只能继承后台代码类啊。
我确实只要继承UserControl1的后台代码,给其他人重写几个响应函数而已,但调用dll后继承就报错了。 怎么实现呢?[/quote] 参见:https://stackoverflow.com/questions/7646331/the-component-does-not-have-a-resource-identified-by-the-uri 中的使用Extension扩展方式。注意 只对同一程序集中的类有效。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧