【问题标题】:How can I connect xaml and xaml.cs files如何连接 xaml 和 xaml.cs 文件
【发布时间】:2011-12-15 15:54:49
【问题描述】:

我有一个 VB 项目,并使用在线转换工具将其转换为 C#。现在的问题是xamlxaml.cs 文件没有相互连接,即它们无法识别它们的依赖关系(图中红色区域)。实际上它应该看起来像 Window1 文件(图像中的绿色区域。)我怎样才能做到这一点。

我正在尝试 WPF,所以可能是外行的问题。

【问题讨论】:

    标签: c# .net wpf xaml


    【解决方案1】:

    这很简单,尝试添加项目现有项目并在格式列表中选择 XAML(不是 .cs 等)文件。在 VS2010 中,这很有帮助。

    【讨论】:

    • 请注意,在 VS 2015(可能还有以前的版本)中,您必须一次添加一个 .xaml 文件。如果您有多个并全选,则它不会添加 .xaml.cs 文件 =(
    • Hitesh.P 的回答支持一次添加多个文件。
    • 什么 VS17 卡住了
    • 2018 年也不行。你到底在做什么,你是用右键还是菜单栏?
    • 澄清一下,从项目中排除 XAML 和 CS 文件。然后使用添加现有项并选择 XAML 文件。
    【解决方案2】:

    如果您无法让 IDE 执行此操作(Papa John 的帖子),那么您可以通过编辑项目文件来执行此操作。

    该信息在 .csproj 文件中(这是一个 XML 文件——您可以在文本编辑器中打开它,或者右键单击它,选择“卸载”,然后打开它——选择重新加载到再次将其作为项目加载)。

    这是要查找的信息,您需要添加“DependentUpon”标签。

    <Compile Include="TheFile.xaml.cs">
      <DependentUpon>TheFile.xaml</DependentUpon>
    </Compile>
    

    【讨论】:

    • 工程文件格式是否依赖IDE?如果是这样,可能有许多不同的格式可以将 xaml 连接到代码。
    • 上面的屏幕截图来自 VS 2010(你可以通过树的样式来判断),所以我使用了 2010 项目的截图。如果您需要不同的版本,查看所需内容的简单方法是使用 1 个 xaml 文件创建一个小测试项目,然后打开项目文件并查看 VS 做了什么。 VS 2005 及更高版本的文件应该非常相似(它们只是 MSBuild 文件)。 2003 和原来的 VS.Net 使用了不同的文件格式。
    • 我在 Xamarin Studio (OS X) 中遇到了这个问题,这为我解决了这个问题。谢谢!
    • 我必须按照此处所述手动执行此操作。其他答案都不适合我(VS2017)。
    【解决方案3】:

    最简单的方法!!!

    我也遇到了同样的情况。我找到了出路。以下是如何在解决方案资源管理器中获取嵌套在 .xaml 下的 .xaml.cs:

    1. 在 Windows 文件资源管理器(Visual Studio 外部)中,打开所需文件所在的文件夹。
    2. 同时选择两个文件(.xaml 和 .xaml.cs)。
    3. 将其拖到解决方案资源管理器中的项目名称上。
    4. 完成! :)

    【讨论】:

    • 这确实有效,对我来说非常有用,允许比上面的答案更多的控制。不理解否决票。
    • 大声笑这个答案实际上支持多个文件,这与 41 个赞成和接受的答案不同...
    • 我使用了它,它在 VS 2017 中工作,除了我必须更改 XAML 文件的文件属性。构建操作是页面并且自定义工具是错误的。将 Build Action 更改为 Embedded Resource 并将 Custom Tool 更改为 UpdateDesignTimeXaml 后一切都很好。
    • 这确实有效。为了清楚起见,您将两个文件从文件资源管理器拖到 Visual Studio 中,然后将它们放在项目项上。 (你的鼠标应该指出你可以把它放在哪里。)另外,我确实需要关闭 VS 2019 并重新打开它以修复项目。
    • 在 VS2019 中,我得到了重复,后缀为 `-copy`,但这很容易解决。我还必须重置自定义工具,例如 @SteveReedSr
    【解决方案4】:

    使用 Xamarin PCL 解决方案:

    1) 转到您的 PCL 文件夹并打开您的 MySolution.csproj 文件

    2) 应该有几组&lt;ItemGroup&gt; 标签。其中一个声明&lt;EmbeddedResource&gt; 标签,另一个将包含&lt;Compile&gt; &lt;DependentUpon&gt;&lt;/DependentUpon&gt;&lt;/Compile&gt; 标签组。

    3) 对于要链接的 MyPage.xamlMyPage.xaml.cs 文件,您必须拥有一组声明您的 xaml 页面的 xml。

    <EmbeddedResource Include="MyPage.xaml">
          <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
          <LogicalName>MyPage.xaml</LogicalName>
    </EmbeddedResource>
    
    <Compile Include="MyPage.xaml.cs">
          <DependentUpon>MyPage.xaml</DependentUpon>
    </Compile>
    

    请注意,如果您的页面位于文件夹中,您应该这样指定:

    <Compile Include="Views\MyPage.xaml.cs">
          <DependentUpon>MyPage.xaml</DependentUpon>
    </Compile>
    
    <EmbeddedResource Include="Views\MyPage.xaml">
          <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
          <LogicalName>MyPage.xaml</LogicalName>
    </EmbeddedResource>
    

    请注意,这适用于 OSX 和 Windows

    【讨论】:

      【解决方案5】:

      根据 Kyle White 对官方Xamarin bug report 55591: .xaml files in .NETStandard library appear twice in solution explorer 的评论,我在链接的.NET Standard sample project by Oren Novotny 中找到了解决此问题的简单方法

      在您的 .csproj 文件中,添加以下

      <ItemGroup>
        <Compile Update="**\*.xaml.cs" DependentUpon="%(Filename)" />
        <EmbeddedResource Include="**\*.xaml" SubType="Designer" Generator="MSBuild:UpdateDesignTimeXaml" LogicalName="%(Filename)%(Extension)" />
      </ItemGroup>
      

      之后,项目结构中的所有 xaml 文件将自动显示在解决方案资源管理器窗口中 - 即使您将添加新的 xaml 文件。

      这个魔法是如何工作的?

      ItemGroup 中的Compile 元素使用通配符遍历所有目录,搜索.xaml.cs 文件并将它们标记为依赖于xaml 文件同名。请注意,这只是因为用于DependentUpon 元素的%(Filename) 项目元数据包含最左边的文件扩展名,按照惯例,它与xaml 文件的名称匹配。 EmbeddedResource 元素会将所有xaml 文件包含到项目中,以便它们在解决方案资源管理器窗口中可见,同时将它们标记为Designer 文件,并声明@ Xamarin.Forms NuGet 包中定义的 987654331@ 目标应用于从标记文件生成代码。

      【讨论】:

        【解决方案6】:

        使用 Xamarin 共享代码解决方案:

        1) 卸载共享项目后转到您的项目文件夹

        2) 找到 projiitems 文件并编辑添加 DependentUpon 标记,如上面其他答案中所述。

        3) 保存文件

        4) 返回 Visual Studio,您应该会看到一个对话框,允许您重新加载所有项目或再次打开项目。

        【讨论】:

          【解决方案7】:

          Xamarin Forms 项目更简单、更快捷的解决方案,根本不需要接触 csproj 文件,非常快速的修复。

          确保您已为解决方案资源管理器选择了 Show All Files - 默认情况下它可能处于启用状态。

          1. 选择所有受影响的文件
          2. 右击>Exclude from Project
          3. 再次选择相同的文件(应该淡出)
          4. 右键>Include in Project

          它们现在应该都已正确嵌套,并且 .csproj 文件所需的所有更改都将完成。

          在此之后您可能会遇到InitializeComponent() does not exist in the current context) 错误。 如果是这种情况,简单的解决方法是..

          • 选择所有受影响的项目并将Build ActionPage更改为Embedded Resource

          【讨论】:

          • 您使用的是 Mac Visual Studio 吗?你能告诉我你在哪里看到这些选项吗?它们不会出现在我的任何菜单或右键单击中。
          • 在 Windows VS.NET 上,我必须从项目中排除,保存项目,退出,然后重新启动。现在 .xaml 和 .xaml.cs 是“一起”的,我可以添加回项目。
          • @t9mike 差不多 4 年后 - 我仍然需要像这样奇怪的小解决方法,并在几乎每次构建之前删除 bin 和 obj 文件夹 - 现在完全是出于习惯!
          【解决方案8】:

          如果您获得了嵌套文件 VS 扩展,您可以通过右键单击类似名称的文件并选择“自动嵌套”来执行此操作,也可以手动嵌套。

          https://marketplace.visualstudio.com/items?itemName=MadsKristensen.FileNesting

          【讨论】:

            【解决方案9】:

            在共享项目中有 .shproj 文件而不是 .csproj 文件,并且 和 项目不存在那里。 但是我发现还有一个 .projiitems 文件,并且如上所述在其中添加一个部分导致 .xaml 和 .cs 文件被链接

            【讨论】:

              【解决方案10】:

              我能够重新启动 Visual Studio for Mac 2019 v16.2,它重新连接了我应该连接的 .xaml 和 .cs 文件。

              如果这不起作用,Hitsa 的解决方案在另一个场合也对我有用。

              【讨论】:

              • 如果根据 JMarsch 的回答从 .csproj 文件中删除了依赖项,您的解决方案将不起作用。除了 csproj 文件中的属性之外,我认为 VS 没有其他方法可以知道哪些文件相互依赖。
              【解决方案11】:

              通常 - 关闭 Visual Studio,删除解决方案根文件夹中的 vs 文件夹,然后重新打开 Visual Studio (2019) 对我有用。

              【讨论】:

                【解决方案12】:

                对于 VS 2019,您只需编辑 .csproj 文件并消除对 .xaml.cs 文件的所有引用 es:

                <ItemGroup>
                    <Folder Include="Models\" />
                    <Folder Include="Services\" />
                    <Folder Include="ViewModels\" />
                  </ItemGroup>
                
                  <ItemGroup>
                    <EmbeddedResource Update="Views\MyPage.xaml">
                      <LogicalName>MyPage.xaml</LogicalName>
                    </EmbeddedResource>
                  </ItemGroup>
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2018-12-31
                  • 1970-01-01
                  • 2010-12-22
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-10-28
                  相关资源
                  最近更新 更多