在 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 异常
WinForms中的Control vs UserControl?