.net 将WinForms应用程序升级到WPF
我有一个几年前在WinForms中编写的辅助项目。为了更好地帮助我学习WPF,我想用WPF重写它。理想情况下,我只想修改当前的项目,并在WPF中重写UI,而不是创建一个新项目 我做那件事有点困难。我执行了以下操作(使用Visual Studio 2008 SP1):.net 将WinForms应用程序升级到WPF,.net,wpf,winforms,visual-studio-2008,upgrade,.net,Wpf,Winforms,Visual Studio 2008,Upgrade,我有一个几年前在WinForms中编写的辅助项目。为了更好地帮助我学习WPF,我想用WPF重写它。理想情况下,我只想修改当前的项目,并在WPF中重写UI,而不是创建一个新项目 我做那件事有点困难。我执行了以下操作(使用Visual Studio 2008 SP1): 将目标框架从2.0更改为3.5 添加了PresentationCore、PresentationFramework和WindowsBase引用 在这一点上,我注意到有些不对劲。当我右键单击项目并选择Add | New Item时,我
<Page Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
MSBuild:编译
设计师
然而,在我的另一个WPF项目中,它是一个ApplicationDefinition。一旦我改变了这一点,我就可以将我的应用程序实例设置为启动对象,我的应用程序就可以运行了。但是,除了用户控件之外,我仍然没有创建任何WPF类型的选项。遗憾的是,没有
WPF和Windows窗体项目不太兼容
- 尽量避免过分挑剔 将逻辑代码导入类库
- 创建新的空白解决方案
- 向解决方案中添加新的WPF项目
- 将类库项目添加到 解决方案
- 将类库设置为的依赖项 WPF项目
- 在WPF中重新创建窗口
<ProjectTypeGuids>
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};
{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};
{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
我找到了描述guid和它们所代表的项目类型的方法。您会注意到,以“60DC”开头的guid与WPF应用程序链接中的列表相匹配。帆船柔道的回答对我来说很有用,可以将WinForms项目转换为WPF,但没有详细描述需要什么
csproj
文件
——很可能它不存在PropertyGroup
标记,请使用不带条件
属性(例如默认属性)的标记
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
从我所看到和测试的情况来看,我现在可以轻松地添加WPF窗口和WinForms。我的旧WinForms也可以正常工作。打开项目清单文件(扩展名为.csproj的文件)并修改PropertyGroup节点(没有条件元素的节点),如下所示:
<PropertyGroup>
<ProjectTypeGuids>
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>
</PropertyGroup>
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
修改后,重新启动VS。现在您可以添加WPF窗口或其他WPF元素。您可能还必须添加对System.Xaml、PresentationCore和PresentationFramework的引用。虽然这样做可行,但我很遗憾倾向于这样做,但Visual Studio必须知道这是一个WinForms项目,而另一个项目是WPF项目。它是如何知道这一点的呢?proj文件中有一些东西,但我不确定我的项目没有ProjectTypeGuids标记,但当我从另一个项目(与您的项目具有相同的Guids)添加它们时,这足以告诉VisualStudio这现在是一个WPF项目。谢谢!:)下面是另一个详细介绍如何将Winforms项目转换为WPF项目的链接。我刚刚测试了一下,看起来真的很棒。