Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将WinForms应用程序升级到WPF_.net_Wpf_Winforms_Visual Studio 2008_Upgrade - Fatal编程技术网

.net 将WinForms应用程序升级到WPF

.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时,我

我有一个几年前在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表单),并构建了项目。我得到一个错误,表明没有主方法

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

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

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

    更新:我仔细查看了.csproj文件,发现App.xaml被添加为一个页面:

    <Page Include="App.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </Page>
    
    
    MSBuild:编译
    设计师
    
    然而,在我的另一个WPF项目中,它是一个ApplicationDefinition。一旦我改变了这一点,我就可以将我的应用程序实例设置为启动对象,我的应用程序就可以运行了。但是,除了用户控件之外,我仍然没有创建任何WPF类型的选项。

    遗憾的是,没有

    WPF和Windows窗体项目不太兼容

    • 尽量避免过分挑剔 将逻辑代码导入类库
    • 创建新的空白解决方案
    • 向解决方案中添加新的WPF项目
    • 将类库项目添加到 解决方案
    • 将类库设置为的依赖项 WPF项目
    • 在WPF中重新创建窗口
    希望这对你有用

    祝你好运

    我不知道项目文件中有什么信息通知了Visual Studio正在使用的项目类型,但我猜“ProjectTypeGuids”是关键

    我的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}

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


  • 从我所看到和测试的情况来看,我现在可以轻松地添加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项目的链接。我刚刚测试了一下,看起来真的很棒。