如何连接xaml和xaml.cs文件

Mar*_*hal 53 .net c# wpf xaml

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

Solution Explorer

我正在尝试WPF,所以可能是一个外行问题.

Pap*_*ohn 75

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

  • 请注意,在VS 2015(可能还有以前的版本)中,您必须一次添加一个`.xaml`文件.如果您有多个并选择all,那么它不会添加`.xaml.cs`文件=( (12认同)
  • 为了澄清一点,从项目中排除 XAML 和 CS 文件。然后使用添加现有项目并选择 XAML 文件。 (3认同)
  • 什么VS17卡住了 (2认同)

JMa*_*sch 45

如果你不能让IDE去做(Papa John的帖子),那么你可以通过编辑项目文件来完成它.

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

以下是要查找的信息,您需要添加"DependentUpon"标记.

<Compile Include="TheFile.xaml.cs">
  <DependentUpon>TheFile.xaml</DependentUpon>
</Compile>
Run Code Online (Sandbox Code Playgroud)


Hit*_*tsa 15

最简单的方法!

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

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

  • 这确实有效并且对我非常有用,允许比上面的答案更多的控制。不懂就投反对票。 (2认同)
  • 我使用了它并且它在 VS 2017 中工作,除了我必须更改 XAML 文件上的文件属性。构建操作是页面,而自定义工具是错误的。将构建操作更改为嵌入式资源并将自定义工具更改为 UpdateDesignTimeXaml 后,一切都很好。 (2认同)

Har*_*rry 7

使用Xamarin PCL解决方案:

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

2)应该有几组<ItemGroup>标签.其中一个声明了<EmbeddedResource>标签,另一个将包含<Compile> <DependentUpon></DependentUpon></Compile>标签组.

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

<EmbeddedResource Include="MyPage.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
      <LogicalName>MyPage.xaml</LogicalName>
</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)
<Compile Include="MyPage.xaml.cs">
      <DependentUpon>MyPage.xaml</DependentUpon>
</Compile>
Run Code Online (Sandbox Code Playgroud)

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

<Compile Include="Views\MyPage.xaml.cs">
      <DependentUpon>MyPage.xaml</DependentUpon>
</Compile>
Run Code Online (Sandbox Code Playgroud)
<EmbeddedResource Include="Views\MyPage.xaml">
      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
      <LogicalName>MyPage.xaml</LogicalName>
</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)

请注意,这适用于OSX和Windows


Sam*_* Rö 5

基于Kyle White对官方Xamarin错误报告55591的评论:.NETStandard库中的.xaml文件在解决方案资源管理器中出现两次,我在Oren Novotny的链接.NET标准示例项目中找到了一个简单的解决方案

.csproj文件中,添加以下<ItemGroup>:

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

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

这个神奇的工作原理如何?

ItemGroup中Compile元素使用通配符迭代所有目录,搜索文件并将它们标记为依赖于同名文件.请注意,这只是因为用于DependentUpon元素的项元数据包含最左侧的文件扩展名,该扩展名按惯例与文件名匹配.该EmbeddedResource元素将包括所有的项目文件,使他们的解决方案资源管理器窗口中可见,而其标记为设计文件,并宣布将在Xamarin.Forms NuGet包中定义的目标应该是用于从标记生成代码文件..xaml.csxaml%(Filename)xamlxamlUpdateDesignTimeXaml