当前位置:  开发笔记 > 编程语言 > 正文

将WinForms应用程序升级到WPF

如何解决《将WinForms应用程序升级到WPF》经验,为你挑选了2个好方法。

我有一个我在几年前在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类型.



1> Sailing Judo..:

不确定项目文件中的内容告诉Visual Studio正在使用什么类型的项目,但我的猜测是"ProjectTypeGuids"是关键.

我的WPF项目有:


   {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};
   {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

这是我发现的一个链接,它描述了guids以及它们代表的项目类型.您会注意到以"60DC"开头的guid与WPF应用程序链接中的列表相匹配.


这是另一个链接,详细描述了如何将Winforms项目转换为WPF项目。我刚刚测试了它,看起来真的很棒。http://www.mobilemotion.eu/?p=1537&lang=zh-CN

2> Thies..:

帆船柔道的答案对我有用,可以将WinForms项目转换为WPF,但没有详细描述需要什么;

    打开csproj要转换的项目的文件.

    搜索字符串- 最可能它不存在.

    在项目文件的标记中添加以下内容.如果您有多个PropertyGroup标签,请使用没有Condition属性的标签(例如默认属性).

    {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

    保存 - 如果您打开项目VS将要求重新加载项目.

从我看到和测试,我现在可以轻松添加WPF Windows WinForms.我的旧版WinForms也可以正常工作.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有