如何创建使用可重载插件的 WPF 应用程序?

Posted

技术标签:

【中文标题】如何创建使用可重载插件的 WPF 应用程序?【英文标题】:How to create WPF Application that uses Reloadable Plugins? 【发布时间】:2011-03-13 15:57:47 【问题描述】:

我手头有一个有趣的问题。

我需要创建一个 WPF 应用程序来承载多个用户控件。 (该应用程序就是这样做的 - 用作具有 UserControls 对接能力的容器)

应用程序还将作为另一个热交换组件托管 UserControls 的数据模型。 (我计划为每个组件使用内部队列,以便可以交换组件。)

这些用户控件必须是可插入的(这很容易),并且在运行时可重新加载(这似乎很难/不可能)。(AppDomains 似乎是这里的答案,但我不知道其他限制比 AppDomain 对 MarshalByValue 和 marshalByRefObject 的限制有任何 GUI 限制吗?)在运行时“可重新加载”,如在应用程序启动时热交换 UI 组件。

我还希望 UserControl 上的上下文菜单有一些来自 Host 的项目和一些来自 UserControl 本身的项目。

我也有逻辑来控制主机和用户控件之间的焦点(更改焦点事件的边框颜色等)无缝(跨主机和用户控件的选项卡)。

顺便说一句,我还希望 UserControl 支持 ActiveX,以便与 Excel 等 ActiveX 容器集成。

这将使我在单独运行 UserControl(单元测试)、在容器中(无缝导航以及与容器和其他相关 UserControl 集成)以及作为 ActiveX 控件与 ActiveX 容器集成方面具有灵活性。

我想知道这是否可能,以及是否有支持这一点的框架(MAF?)。任何指向示例或文档的指针都会有所帮助。

提前谢谢你,

问候, 文。

【问题讨论】:

【参考方案1】:

我一直在探索类似的场景。根据您的描述,MAF 似乎是您最好的选择。 The MSDN documentation is here。 This codeplex site 包含 MAF 的工具和示例。希望这会有所帮助。

【讨论】:

以上是关于如何创建使用可重载插件的 WPF 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

WPF怎么能跨进程通信

如何创建可重用的 WPF 网格布局

wpf 能不能在winxp运行

如何在 WPF 中创建可折叠面板

如何在 WPF 中创建可编辑的树列表视图?

Wpf和命令行应用程序在同一个可执行文件中