web-dev-qa-db-ja.com

xamlおよびxaml.csファイルを接続するにはどうすればよいですか

VB=を投影し、オンライン変換ツールを使用してC#に変換しました。問題はxamlxaml.csファイルは相互に接続しません。つまり、依存関係を認識しません(図の赤い領域)。実際には、Window1ファイル(画像の緑の領域)のように表示されるはずです。どうすればこれを実現できますか。

Solution Explorer

私はWPFを試しているので、素人の質問かもしれません。

52
Marshal

これは簡単です。プロジェクトに既存のアイテムを追加し、形式のリストで(.csなどではなく)XAMLファイルを選択してみてください。 VS2010ではそれが役立ちます。

73
Papa John

IDEで取得できない場合(Papa Johnの投稿))、プロジェクトファイルを編集して取得できます。

その情報は.csprojファイル(XMLファイルです。テキストエディターで開くか、右クリックして「アンロード」を選択してから開くことができます)。リロードを選択してロードします再びプロジェクトとして)。

検索する情報は次のとおりです。「DependentUpon」タグを追加する必要があります。

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

最も簡単な方法!!!

私は同じに出会いました。抜け出した。ソリューションエクスプローラーで.xamlの下に.xaml.csをネストする方法は次のとおりです。

  1. Windowsエクスプローラー(Visual Studioの外部)で、必要なファイルがあるフォルダーを開きます。
  2. 両方のファイル(.xamlおよび.xaml.cs)を一緒に選択します。
  3. ソリューションエクスプローラーのプロジェクト名にドラッグします。
  4. 完了しました! :)
15
Hitsa

Xamarin PCLソリューションの使用:

1)PCLフォルダーに移動して、MySolution.csprojファイルを開きます

2)<ItemGroup>タグのグループがいくつかあるはずです。それらの1つは<EmbeddedResource>タグを宣言し、別の1つは<Compile> <DependentUpon></DependentUpon></Compile>タグのグループを含みます。

3)MyPage.xamlおよびMyPage.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で動作することに注意してください

7
Harry

カイル・ホワイトの公式 Xamarinバグレポート55591:.NETStandardライブラリの.xamlファイルがソリューションエクスプローラーに2回表示される に関するコメントに基づいて、リンクされた 。NET Oren Novotnyによる標準サンプルプロジェクト

。csprojファイル内に、次の<ItemGroup>を追加します。

_<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パッケージ内で定義されたUpdateDesignTimeXamlターゲットを使用して、マークアップファイルからコードを生成する必要があることを宣言します。

5
Sam del Rö

Xamarin Shared Codeソリューションの使用:

1)共有プロジェクトをアンロードした後、プロジェクトフォルダーに移動します

2)projitemsファイルを見つけ、上記の他の回答の説明に従ってDependentUponタグを追加して編集します。

3)ファイルを保存する

4)Visual Studioに戻り、ダイアログを取得して、すべてをリロードするか、プロジェクトを再度開くことができます。

2
dracosveen

Nested File VS Extensionを取得する場合、同様の名前のファイルを右クリックして「自動的にネスト」を選択するか、手動でネストすることでこれを行うことができます。

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

1
Kris Coleman

共有プロジェクトには、.csprojファイルの代わりに.shprojファイルがあり、およびアイテムはそこに存在しません。しかし、.projitemsファイルもあり、上記のセクションを追加すると、.xamlファイルと.csファイルがリンクされました

1
john.gleeson

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_に変更します
0
Bejasc