c# - 如何允许插件通过公共(public)属性公开 WPF 或 WindowsForms 控件?

标签 c# wpf winforms .net-4.0

我目前正在开发一个允许使用插件的应用程序。其中一个功能是该插件可以公开一个设置 UI,托管应用程序会将其嵌入到某处供用户查看。

我想知道是否有某种方法可以将属性添加到我的插件界面,该属性将允许插件开发人员创建 wpf 或 winforms UI 并通过此属性公开它,同时保持属性类型? (即不使用“对象”作为属性类型),或不使用单独的属性(即 WPFUI、WinFormsUI)等。

最佳答案

这两种技术的工作原理非常不同。我建议要么公开 Windows.Forms.ControlFrameworkElement ,但不是两者(至少不是来自相同插件 API)。

如果您公开一个 Control,则使用 ElementHost 提供 WPF 控件很简单。 。同样,Windows 窗体插件可以通过 WindowsFormsHost 提供 FrameworkElement .

我在这里的决定更多地取决于主机应用程序的开发方式。如果您使用 WPF,我强烈建议将插件公开为 FrameworkElement,因为这为您提供了更多的灵活性。如果您的主应用程序将基于 Windows 窗体,那么只需公开 Control 就很简单。

如果您不希望增加这种复杂性,我实际上会推荐两种单独的 API - 一种用于 Windows 窗体用户,一种用于 WPF 用户,因为这可以使最终用户保持简单性。根据插件机制,这通常相当容易提供。

关于c# - 如何允许插件通过公共(public)属性公开 WPF 或 WindowsForms 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059968/

相关文章:

wpf - 使用 MEF 进行多次导出确实会造成一些令人发指的事情——为什么,为什么允许这样做?

windows - 如何检测我的应用程序是最顶层的窗口

c# - 如何处理 System.IndexOutOfRangeException

c# - 将数组划分为子序列数组的数组

c# - 在 C# 接口(interface)应用程序之间通信并注入(inject)到另一个进程 dll

c# - SQL注入(inject)在winforms中有效吗?

c# - 如何覆盖 winforms 组合框项目集合以实现特定接口(interface)

c# - Ngen vs RyuJIT - 在(预)启动无关紧要时最快的 x64 运行代码

c# - WPF 中的绑定(bind)未按预期工作

c# - 图像的 WPF 内存问题