我有一个我在几年前在WinForms中写过的副项目.为了更好地帮助我学习WPF,我想在WPF中重写它.理想情况下,我想修改我当前的项目并在WPF中重写UI而不是创建新项目.
我在做这件事时遇到了一些问题.我做了以下(使用Visual Studio 2008 SP1):
将目标框架从2.0更改为3.5.
添加了PresentationCore,PresentationFramework和WindowsBase引用.
在这一点上,我注意到有些不对劲.当我右键单击该项目并选择Add | New Item,我没有创建WPF窗口的选项 - 我可以创建的唯一WPF类是WPF用户控件.由于我有一些其他WPF项目,我将App.xaml.*和Window1.xaml.*从该项目复制到我的,并根据需要更新它们(基本上只是将该项目的命名空间更改为我项目的命名空间).
然后我删除了Program.cs(之前包含Main方法,显示了主WinForm表单),并构建了该项目.我收到一个错误,表明没有Main方法.
看起来内部Visual Studio知道这个项目实际上是一个WinForms应用程序,而不是WPF应用程序.在WPF项目中(通过选择"WPF Application"创建),在Application属性中,我可以将Application类的实例设置为启动对象.在我的WinForms转换项目中,这不是一个选项.
我在文本编辑器中快速查看了.csproj文件,但我找不到任何可以告诉Visual Studio项目实际上是WinForms而不是WPF的东西.
还有什么办法可以将我的WinForms项目变成一个"真正的"WPF项目?除了创建新项目并只替换当前项目之外,我还有其他选择吗?
更新:我仔细查看了.csproj文件,我注意到App.xaml已添加为页面:
MSBuild:Compile Designer
但是,在我的其他WPF项目中,它是一个ApplicationDefinition.一旦我改变了,我可以将我的Application实例设置为启动对象,我的应用程序将运行.但是,我仍然没有选项来创建除用户控件之外的任何WPF类型.
我不确定项目文件中的内容告诉Visual Studio正在使用什么类型的项目,但我的猜测是"ProjectTypeGuids"是关键.
我的WPF项目有:
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548}; {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
这是我发现的一个链接,它描述了guids以及它们代表的项目类型.您会注意到以"60DC"开头的guid与WPF应用程序链接中的列表相匹配.
帆船柔道的答案对我有用,可以将WinForms项目转换为WPF,但没有详细描述需要什么;
打开csproj
要转换的项目的文件.
搜索字符串
- 最可能它不存在.
在项目文件的标记中添加以下内容.如果您有多个PropertyGroup
标签,请使用没有Condition
属性的标签(例如默认属性).
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
保存 - 如果您打开项目VS将要求重新加载项目.
从我看到和测试,我现在可以轻松添加WPF Windows 和 WinForms.我的旧版WinForms也可以正常工作.