比方说,我有一个WPF应用程序,它显示一个带有ArrayList的ListBox - 用任意类型的对象进行填充 - 作为源,并且此应用程序托管在程序集“A”中。默认情况下,ListBox将显示自定义对象的'ToString'方法的返回值。如果找到该对象类型的数据模板,那么ListBox将使用它来进行渲染。 想象一下,另一个程序集'B'引用了'A',并试图通过为某些类型提供定制数据模板来扩展它,以便在该列表框中使用。如果没有'A'知道B,有没有办法做到这一点?如何使用插件类构架来扩展WPF应用程序?
2
A
回答
1
是的,这是WPF的一个非常常见的用法。
在汇编B:
- 创建主题文件夹包含一个名为Generic.xaml文件,其中包含一个空
<ResourceDictionary>
标签 - 的
<ResourceDictionary>
标签内,B中 添加的DataTemplates和CONTROLTEMPLATES的类型
在您的AssemblyInfo.cs文件中,添加以下行:
[assembly:ThemeInfo(ResourceDictionaryLocation.None,ResourceDictionaryLocation.SourceAsse mbly)]
现在,在您组件A:
- 创建UI浏览到组件B(或以其他方式选择的.dll文件)
- 当用户选择的组件B至使用,使用
var assembly = Assembly.LoadFile(path)
加载它 - 使用
Activator.CreateInstance(assembly.GetType(typeName))
创造集B的对象只知道它的名字 - 这个对象添加到您的UI,或者创建使用定义的接口的其他对象(接口本身在组件A中定义)并添加到您的UI中
在程序集B中定义的模板将用于呈现程序集B中的控件和数据,即使程序集A不知道组装B.
2
看一下Composite Application Guidance。它应该适合你。
相关问题
- 1. 使用用户插件扩展Java应用程序
- 2. 创建一个插件来扩展Qt应用程序
- 3. 使用插件扩展Java Web应用程序
- 4. 使用C#插件扩展C++应用程序
- 5. WPF应用程序插件使用来自主机应用程序的资源
- 6. 构建Rails应用程序的扩展框架
- 7. 如何为应用程序结构配置应用程序服务器扩展
- 8. 在Android中扩展应用程序类
- 9. JavaFX不扩展应用程序类
- 10. 在Android中扩展类应用程序?
- 11. 使用应用程序扩展的Cocoapods
- 12. 使用python扩展C++应用程序
- 13. 如何扩展django可插拔应用程序?
- 14. 如何扩展ZF2框架应用程序 - 使用外键的实体
- 15. 如何从构建中排除IOS 8应用程序扩展?
- 16. 我如何构建基于扩展概念的应用程序?
- 17. 扩展应用程序
- 18. 扩展应用程序
- 19. 使用MVVM模式的Wpf Prism应用程序架构
- 20. Windows移动应用程序是否存在插件或扩展框架
- 21. 将C#控制台应用程序扩展到WPF应用程序
- 22. NSExtensionActivationRule&iOS应用程序扩展:如何激活iTunes中的扩展程序
- 23. Ruby on Rails应用程序的扩展/插件/模块系统?
- 24. 设计和规划“可扩展插件”应用程序
- 25. 我可以使用扩展应用程序的两个类吗?
- 26. Rails引擎:使用应用程序类扩展模型
- 27. 扩展WPF控件类
- 28. 如何扩展应用程序类在Android上角nativeScriptBootstrap
- 29. 如何使用python程序构建chrome扩展?
- 30. 如何扩展使用Akka的Scala REST应用程序?
虽然这不是我的问题的直接答案,它将是非常有用的,谢谢 – 2010-05-13 19:03:39