it-swarm-pt.tech

Como posso conectar arquivos xaml e xaml.cs?

Eu tinha um VB projetado e converti-lo para C # usando ferramentas de conversão on-line. Agora o problema é que xaml e xaml.cs não se conectam, isto é, eles não reconhecem suas dependências (Red area in Fig). Na verdade, ele deve aparecer como arquivos Window1 (área verde na imagem). Como posso conseguir isso?.

Solution Explorer

Estou testando minhas mãos no WPF, então pode ser um tipo de pergunta leiga.

48
Marshal

Isso é simples, tente adicionar itens existentes no projeto e selecione os arquivos XAML (não .cs, etc.) na lista de formatos. Em VS2010 isso ajuda.

68
Papa John

Se você não pode obter o IDE para fazê-lo (post do Papa John), então você pode fazê-lo editando o arquivo do projeto.

Essa informação está no arquivo .csproj (que é um arquivo XML - você pode abri-lo em um editor de texto ou clicar com o botão direito nele, escolher "descarregar" e abri-lo - escolha recarregar para carregá-lo como um projeto novamente).

Aqui está a informação para procurar, você precisaria adicionar a tag "DependentUpon".

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

Caminho mais fácil !!!

Eu me deparei com o mesmo. Eu consegui sair. Aqui está como obter o .xaml.cs aninhado sob o .xaml no Solution Explorer:

  1. No Windows File Explorer (fora do Visual Studio), abra a pasta onde estão os arquivos necessários.
  2. Selecione os dois arquivos (.xaml e .xaml.cs) juntos.
  3. Arraste-o para o nome do seu projeto no Solution Explorer.
  4. Está feito! :)
15
Hitsa

Usando uma solução PCL Xamarin:

1) Vá para a pasta PCL e abra seu MySolution.csproj file

2) Deve haver vários grupos de tags <ItemGroup>. Um deles declara <EmbeddedResource> tags e outro conterá <Compile> <DependentUpon></DependentUpon></Compile> grupos de tags. 

3) Para MyPage.xaml e MyPage.xaml.cs arquivos a serem vinculados, você deve ter um grupo de xmls que declara sua página xaml.

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

Note que se sua página está em uma pasta você deve especificar isso da seguinte forma:

<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>

Observe que isso funciona com o OSX e o Windows

6
Harry

Com base no comentário de Kyle White sobre o relatório de bug oficial Xamarin 55591: arquivos .xaml na biblioteca .NETStandard aparecem duas vezes na solução Explorer , encontrei uma solução simples para esse problema no projeto de amostra vinculado .NET Standard por Oren Novotny

Em seu arquivo .csproj , adicione o seguinte <ItemGroup>:

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

Depois, todos os arquivos xaml dentro da estrutura do projeto serão exibidos na janela Solution Explorer automaticamente - mesmo que você adicione novos arquivos xaml.

Como essa mágica funciona?

O Compile element dentro do ItemGroup está usando curingas para percorrer todos os diretórios, procurando por arquivos .xaml.cs e marcando-os como dependentes dos arquivos xaml de mesmo nome. Observe que isso funciona apenas porque os metadados do item %(Filename) usados ​​para o elemento DependentUpon contêm a extensão de arquivo mais à esquerda, que corresponde ao nome do arquivo xaml por convenção. O EmbeddedResource element incluirá todos os arquivos xaml no projeto, para que eles fiquem visíveis dentro da janela do Solution Explorer enquanto marcando-os como arquivos Designer, e declarando que o alvo UpdateDesignTimeXaml definido dentro do pacote Xamarin.Forms NuGet deve ser usado para gerar código a partir do arquivo de marcação.

5
Sam del Rö

Usando a solução Xamarin Shared Code:

1) Vá para a pasta do projeto depois de descarregar o projeto compartilhado

2) Encontre o arquivo de projetos e edite-o adicionando a tag DependentUpon, conforme descrito em outras respostas acima.

3) Salve o arquivo

4) Volte para o visual studio e você deve obter um diálogo que permita recarregar tudo ou apenas abrir o projeto novamente.

2
dracosveen

Se você obtiver a extensão VS do arquivo aninhado, poderá fazer isso clicando com o botão direito em arquivos com nomes semelhantes e escolhendo "aninhar automaticamente" ou aninhar manualmente. 

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

1
Kris Coleman

Em um projeto compartilhado, há um arquivo .shproj em vez de um arquivo .csproj e os itens e não existem nele. No entanto, descobri que há também um arquivo .projitems, e adicionar uma seção como descrito acima fez com que os arquivos .xaml e .cs fossem vinculados

1
john.gleeson

Uma solução ainda mais fácil e rápida para os projetos Xamarin Forms, sem necessidade de tocar no arquivo csproj, uma solução muito rápida.

Certifique-se de ter Show All Files selecionado para o Solution Explorer - ele pode estar ativado por padrão.

  1. Selecione todos os arquivos afetados
  2. Clique com o botão direito> Exclude from Project
  3. Selecione os mesmos arquivos novamente (deve estar desbotado)
  4. Clique com o botão direito> Include in Project

Agora eles devem estar todos aninhados corretamente e todas as alterações necessárias no arquivo .csproj serão feitas. 

Você pode ter um erro InitializeComponent() does not exist in the current context) após isso. Se for esse o caso, a solução simples é ..

  • Selecione todos os itens afetados e altere Build Action de Page para Embedded Resource
0
Bejasc