Как я могу подключить файлы xaml и xaml.cs - PullRequest
52 голосов
/ 15 декабря 2011

Я спроектировал VB и преобразовал его в C #, используя инструменты онлайн-конвертации.Теперь проблема в том, что xaml и xaml.cs файл не соединяются друг с другом, то есть они не распознают свои зависимости (красная область на рис.).На самом деле это должно выглядеть как Файлы Window1 (Зеленая область на изображении.) Как я могу этого добиться.вопрос.

Ответы [ 9 ]

73 голосов
/ 15 декабря 2011

Это просто, попробуйте добавить в проект существующие элементы и выбрать файлы XAML (не .cs и т. Д.) В списке форматов.В VS2010 это помогает.

44 голосов
/ 15 декабря 2011

Если вы не можете заставить IDE сделать это (сообщение Папы Джона), то вы можете сделать это, отредактировав файл проекта.

Эта информация находится в файле .csproj (который является файлом XML - вы можете открыть его в текстовом редакторе или щелкнув правой кнопкой мыши по нему, выбрав «выгрузить», а затем открыв его, - выбрать «Перезагрузить, чтобы снова загрузите его как проект).

Вот информация для поиска, вам нужно добавить тег «DependentUpon».

<Compile Include="TheFile.xaml.cs">
  <DependentUpon>TheFile.xaml</DependentUpon>
</Compile>
15 голосов
/ 01 февраля 2016

Самый простой способ !!!
Я сталкивался с тем же.Я получил выход.Вот как получить .xaml.cs, вложенный в .xaml в обозревателе решений:

  1. В проводнике Windows (за пределами Visual Studio) откройте папку, в которой находятся необходимые файлы.
  2. Выберите оба файла (.xaml и .xaml.cs) вместе.
  3. Перетащите его на имя своего проекта в обозревателе решений.
  4. Готово!:)
7 голосов
/ 24 февраля 2017

Использование решения Xamarin PCL:

1) Перейдите в папку PCL и откройте MySolution.csproj файл

2) Должно быть несколько групп тегов <ItemGroup>. Один из них объявляет <EmbeddedResource> тегов, а другой будет содержать <Compile> <DependentUpon></DependentUpon></Compile> групп тегов.

3) Для файлов MyPage.xaml и MyPage.xaml.cs необходимо иметь группу xmls, которая объявляет вашу страницу xaml.

<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 голосов
/ 27 сентября 2017

Основываясь на комментарии Кайла Уайта к официальному отчету об ошибке Xamarin 55591: файлы .xaml в библиотеке .NETStandard дважды появляются в обозревателе решений , я нашел простое решение этой проблемы в связанной . NET Стандартный пример проекта Орен Новотный

В вашем файле .csproj добавьте следующее :

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

После этого все файлы xaml в структуре проекта будут автоматически отображаться в окне обозревателя решений - даже если вы когда-нибудь добавите новые файлы xaml.

Как работает эта магия?

Элемент Compile в ItemGroup использует подстановочные знаки для перебора всех каталогов, поиска файлов .xaml.cs и пометки их как зависимых от файлов xaml того же название. Обратите внимание, что это работает только потому, что метаданные элемента %(Filename), используемые для элемента DependentUpon , содержат самое левое расширение файла, соответствующее соглашению с именем файла xaml. Элемент EmbeddedResource будет включать в себя все файлы xaml проекта, чтобы они были видны в окне обозревателя решений, пометив их как файлы Designer и объявив, что UpdateDesignTimeXaml Цель, определенная в пакете Xamarin.Forms NuGet, должна использоваться для генерации кода из файла разметки.

2 голосов
/ 14 мая 2017

Использование решения Xamarin Shared Code:

1) Перейдите в папку вашего проекта после выгрузки общего проекта

2) Найдите файл projitems и отредактируйте его, добавив тег DependentUpon, как описано в другихответы выше.

3) Сохраните файл

4) Вернитесь в Visual Studio, и вы должны получить диалоговое окно, которое позволяет перезагрузить все или просто открыть проект снова.

1 голос
/ 10 декабря 2018

В общем проекте вместо файла .csproj есть файл .shproj, а элементы и там не существуют. Однако я обнаружил, что есть также файл .projitems, и добавление в него раздела, как описано выше, привело к связыванию файлов .xaml и .cs

1 голос
/ 18 апреля 2018

Если вы получили расширение VS для вложенных файлов, вы можете сделать это, щелкнув правой кнопкой мыши файлы с одинаковыми именами и выбрав «вкладывать автоматически», или вы можете вложить вручную.

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

0 голосов
/ 01 февраля 2018

Еще более простое и быстрое решение для проектов 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 Action с Page на Embedded Resource
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...