【问题标题】:WPF Application referencing System.Windows.FormsWPF 应用程序引用 System.Windows.Forms
【发布时间】:2009-03-30 11:07:11
【问题描述】:

我正在创建我的第一个 WPF 应用程序,我想了解在混合来自 System.Windows.Forms 命名空间的功能时是否存在某种最佳实践。

基本上,我希望在用户监视器的右下角默认打开一个弹出窗口。

我在 WPF 命名空间中找不到等效的 Screen.PrimaryScreen.Bounds。我看到的示例建议在 WPF 应用程序中引用 System.Windows.Forms。

这让我想到了这个问题,这是不好的做法吗?考虑到默认情况下不包含此参考。

我将在我现有的 Windows 窗体应用程序中引用 WPF 所需的资源,以便我可以使用这个新的 WPF 窗口。

这种方法有什么问题吗?

编辑:我实际上找到了一个返回主屏幕信息而不引用 Windows 窗体的属性。该属性是 SystemParameters.WorkArea,但我的混合引用问题仍然存在。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您还应该考虑资源和性能开销,因为您的应用程序必须为 Windows 窗体和 WPF 加载程序集。在 MSDN 论坛中多次提到 WPF/Winforms 互操作需要相当多的 CPU 周期...

    【讨论】:

      【解决方案2】:

      我不认为在需要时引用 WinForms 是不好的。由于 WPF 仍然是一项相对较新的技术,它与 WinForms 的功能还没有完全对等。例如,据我所知,尚未在 WPF 中实现任何标准的 Windows 对话框(打开文件、保存文件、浏览文件夹等)。在 WPF 应用程序中显示这些的唯一方法是使用 WinForms 版本,或者使用 P/Invoke 自己显示 Win32 版本。我个人使用 WinForms 版本,因为他们已经费心包装 Win32 API。

      我的方法是尽可能多地使用 WPF,如果 WPF 不能满足我的需求,则只回退到 WinForms。希望在 WPF 的下一个版本左右,这将变得越来越没必要。

      【讨论】:

      • WPF 确实有 OpenFileDialog 和 SaveFileDialog。它们位于 Microsoft.Win32 命名空间中。
      • 哇,我不知道。谢谢你的提示。 :)
      猜你喜欢
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多