【发布时间】:2020-04-27 22:24:52
【问题描述】:
我在我的解决方案中添加了一个 WPF 项目,其中包含一个项目 - 一个 Winforms 项目。然后我从 Winforms 一中引用了 WPF 项目并添加了适当的引用。然后,我在原始 Winforms 项目中创建了一个新的 WPF 窗口,并从按钮事件处理程序中打开它。效果很好。
然而,
过去在搜索类似解决方案时,我不记得提到过这个解决方案(只是向解决方案中添加另一个项目),所以我想知道:将 WPF 窗口添加到 Winforms 应用程序时是否存在陷阱?
编辑
我不是指将其嵌入到表单中。只是一个单独的窗口(可能 而不是 的主窗体)。而且我也不是指明显的挑战,例如需要将位图转换为其 WPF 等效项。我只是指没有注意到的陷阱,应用程序编译并似乎可以运行,但是,例如,稍后在具有不同 DPI 的机器上执行时 - 显示不正确。
【问题讨论】:
-
WinForms 项目变为 DpiAware (
SystemAware)。如果它还不是 DpiAware,那就是。除此之外,不多。除非您说 添加 WPF 窗口 您的意思是 嵌入 它。如果是这样,我不知道,我从来没有这样做过。 -
@Jimi 谢谢。 (我的意思不是嵌入。这可能会产生更多问题。)
-
该评论当然与简单的共存有关。合作/互动可能需要特殊处理,具体取决于角色。 DataBinding 的工作方式不同,ObservableCollection 虽然可以在 WinForms 中使用,但没有来自框架的相同支持,通常使用 BindingList 和 BindingSource,因此如果需要,您可能需要一个代理来启用双向数据绑定。基本图形对象(Image、Bitmap vs. BitmapSource、BitmapImage、WriteableBitmap)虽然易于转换,但并不直接兼容等。
-
关于 DataBindings,实现
INotifyPropertyChanged的对象在两个框架中都是兼容的并且功能齐全。当 DataTable 不可用时,BindingSource 类可以很好地处理此类对象。