将 WPF 控件与 WinForms 一起使用

Posted

技术标签:

【中文标题】将 WPF 控件与 WinForms 一起使用【英文标题】:Using a WPF Control with WinForms 【发布时间】:2021-05-28 18:48:39 【问题描述】:

我有一个自定义的 WPF 按钮控件,我想将此控件与 WinForm 应用程序一起使用。我知道如何使用 ElementHost 将 WPF 用户控件与 WinForm 一起使用。但我不知道将任何单个控件(不是用户控件)与 WinForm 应用程序的所有成员一起使用。你能建议我实现这一目标的好方法吗

【问题讨论】:

坚持一个平台。如果您的应用程序很小(比如说总共少于 100 个控件),请将整个应用程序转换为 WPF。如果它太大或者你不能决定重写它(比如超过 1000 个控件),坚持 WinForms 直到你可以重写它。在标准的 Winform 上贴一个花哨的按钮看起来非常丑陋,它也会带来技术上的复杂性 【参考方案1】:

使用System.Windows.Forms.Integration命名空间中的ElementHost

Here是详细教程

【讨论】:

那篇文章描述了如何将 WPF 用户控件添加到 Winforms。但我想添加一个控件,其所有成员不是用户控件 @pasanmaduranga,请再次检查... ElementHost 控件用于 WinForms 中的 WPF,就像 WindowsFormsHost 用于 WPF 中的 WinForms 我真正想要的是 WInForms 中的 WPF 嗯,同样,ElementHost 是一个 WinForm 控件,可用于承载 WPF 元素。 ElementHost 是你要找的东西,检查一下。我不明白,为什么你认为它是用于在 wpf 中托管 winform 的?【参考方案2】:

您不能将它包装到 UserControl 中吗?您仍然可以使用 Host.CustomizedButton.xxx 来访问所有属性和方法。

【讨论】:

以上是关于将 WPF 控件与 WinForms 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

在默认 AppDomain 中的 Winforms 中托管 WPF 用户控件的弹出窗口中的选项卡导航损坏

NET Core 3.1 WinForms Designer 与 WPF 用户控件不兼容

在 WinForms 应用程序中使用 WPF,将应用程序资源放在哪里?

WPF 引发异常解析 XAML,其中包括 Winforms 用户控件

WinForms 或 WPF 的文本差异可视化控件

Winforms 中的 WPF 事件