在 VS 2010 的 Winforms 项目中添加 WPF 窗口

Posted

技术标签:

【中文标题】在 VS 2010 的 Winforms 项目中添加 WPF 窗口【英文标题】:Add WPF Window in a Winforms Project in VS 2010 【发布时间】:2012-01-21 23:21:33 【问题描述】:

在 VS 2010 中选择“添加新项目”时,是否可以从 winforms 项目访问所有 WPF 项目?默认情况下,我只能访问 WPF userControl。 我想将 WPF 窗口添加到 winforms 项目。不仅仅是一个用户控件。

编辑:简短回答:这似乎是不可能的本身,但可以手动添加 WPF 资源和必要的引用。

【问题讨论】:

查看***.com/questions/450377/… 【参考方案1】:

显然你不能直接,但你可以做的是添加一个新的用户控件,然后修改代码使其成为一个窗口。只需创建一个新的 WPF 项目,添加一个窗口,然后查看需要更改哪些内容才能将用户控件变为窗口。

【讨论】:

我想过这样做,但我认为它不会很简单而且有点牵强,所以我什至没有尝试 :-) 我会试一试 嗯,第一步是用 XAML 中的 Window 标记替换 UserControl 标记,并使类扩展 Window。然后看看还有什么。 这可能是最好的解决方案,这里一步一步解释:i-think22.net/archives/2008/08/05/…【参考方案2】:

在我看来,“最干净”的选项是使用这个方案:

    创建一个 WPF 项目(添加您需要的任何 WPF 窗口)。让我们称之为 “WPF项目” 在同一个解决方案中创建一个 WinForms 项目(添加任何您 需要)。让我们称之为“MainProject”。

    在 MainProject 中添加对:

    WPF 项目 PresentationCore 演示框架

就是这样,现在您可以从 MainProject 打开 WPF 窗口(例如,通过按下按钮):

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim mywpfform = New WPFProject.MainWindow //MainWindow is the default name of your first WPF window. Obviously you can open any other
        mywpfform .Show()
End Sub

【讨论】:

不幸的是,不解释就拒绝投票是 SOF 上可能发生的最粗鲁的事情【参考方案3】:

有可能做到这一点,我不得不多次使用这种技术而没有任何问题:

How to programmatically create a WPF window in a WinForm application

【讨论】:

谢谢,这也很有帮助。不完全符合我的预期,但它提供了有价值的信息。【参考方案4】:

可以在同一个项目中使用 WinForms 和 WPF。可以修改 WinForm 项目,以便可以添加 WPF 窗口和其他 WPF 元素。为此,您必须将 WPF 项目 GUID 添加到 WinForms 项目的清单文件中。

打开项目清单文件(一个带有.csproj扩展名的文件)并修改PropertyGroup节点(没有Condition元素的那个)如下:

  <PropertyGroup>
     <ProjectTypeGuids>
         60dc8134-eba5-43b8-bcc9-bb4bc16c2548;FAE04EC0-301F-11D3-BF4B-00C04F79EFBC
     </ProjectTypeGuids>
  </PropertyGroup>

修改后重启VS。现在您可以添加 WPF 窗口或其他 WPF 元素。您可能还需要添加引用 System.Xaml、PresentationCore 和 PresentationFramework。

更多信息请查看:https://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs和http://www.mobilemotion.eu/?p=1537

【讨论】:

以上是关于在 VS 2010 的 Winforms 项目中添加 WPF 窗口的主要内容,如果未能解决你的问题,请参考以下文章

VS2010 在 64 位版本的 Windows 上的 WinForms 应用程序中不显示未处理的异常消息

vs2013 winforms 项目在其他计算机上不起作用,给出 filenotfound 异常

vs2010 C#的命令行程序,怎么清屏?

WinForms中的Control vs UserControl?

在 C# VS2008 项目中使用 sqlite 的数据访问方法?

Visual Studio 2013将不显示Winforms,错误“项目中已存在对组件的引用'系统'