代码之家  ›  专栏  ›  技术社区  ›  Andy

将WinForms应用程序升级到WPF

  •  14
  • Andy  · 技术社区  · 16 年前

    我有一个几年前在WinForms中编写的辅助项目。为了更好地帮助我学习WPF,我想用WPF重写它。理想情况下,我只想修改当前的项目,并在WPF中重写UI,而不是创建一个新项目。

    我做那件事有点困难。我执行了以下操作(使用Visual Studio 2008 SP1):

    1. 将目标框架从2.0更改为3.5。

    在这一点上,我注意到有些不对劲。当我右键单击项目并选择Add | New Item时,我没有创建WPF窗口的选项-我可以创建的唯一WPF类是WPF用户控件。由于我还有其他一些WPF项目,所以我将App.xaml.*和Window1.xaml.*从该项目复制到我的项目中,并根据需要进行更新(基本上只是将该项目的名称空间更改为我项目的名称空间)。

    然后我删除了Program.cs(它以前包含Main方法,显示了主WinForm表单),并构建了项目。我得到一个错误,表明没有主方法。

    看起来VisualStudio内部知道这个项目实际上是一个WinForms应用程序,而不是WPF应用程序。在WPF项目中(通过选择“WPF应用程序”创建),我可以在应用程序属性中将应用程序类的实例设置为启动对象。在我的WinForms转换项目中,这不是一个选项。

    我在文本编辑器中快速查看了.csproj文件,但找不到任何东西可以告诉Visual Studio该项目实际上是WinForms而不是WPF。

    我还需要做什么才能将我的WinForms项目变成一个“真正的”WPF项目?除了创建新项目和替换当前项目之外,我还有其他选择吗?

    更新:

    <Page Include="App.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </Page>
    

    3 回复  |  直到 16 年前
        1
  •  30
  •   Sailing Judo    16 年前

    项目文件中的内容通知VisualStudio正在使用的项目类型,但我猜“ProjectTypeGuids”是关键。

    我的WPF项目具有以下特点:

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

    Here is a link 我找到了描述guid和它们所代表的项目类型的方法。您会注意到,以“60DC”开头的guid与WPF应用程序链接中的列表相匹配。

        2
  •  24
  •   zastrowm    9 年前

    1. 打开 csproj 要转换的项目的文件。
    2. 搜索字符串 <ProjectTypeGuids> -很可能它不会存在。
    3. PropertyGroup 标签,使用不带标签的标签 Condition 属性(例如,默认属性)。

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

    4. 保存-如果项目已打开,VS将要求重新加载项目。

    WinForms。我的旧WinForms也可以正常工作。

        3
  •  1
  •   Norbert B. MJB    16 年前

    遗憾的是,没有。

    • 将逻辑代码导入类库
    • 创建新的空白解决方案
    • 将类库项目添加到 解决方案
    • WPF项目
    • 在WPF中重新创建窗口

    希望这对你有用。

    祝你好运!

        4
  •  1
  •   Cenk    5 年前

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

    修改后,重新启动VS。现在您可以添加WPF窗口或其他WPF元素。您可能还必须添加对System.Xaml、PresentationCore和PresentationFramework的引用。