2011-12-15 15 views
43

Ho avuto un VB proiettato e convertito in C# utilizzando strumenti di conversione online. Ora il problema è xaml e il file xaml.cs non si connettono tra loro, cioè non riconoscono le loro dipendenze (area rossa in Fig). In realtà dovrebbe apparire come i file Window1 (area verde nell'immagine). Come posso ottenerlo.Come posso collegare i file xaml e xaml.cs

Solution Explorer

Sto provando il mio mani su WPF quindi potrebbe essere una sorta di laico domanda.

risposta

61

Questo è semplice, prova ad aggiungere in progetto gli elementi esistenti e seleziona i file XAML (non .cs, ecc.) Nell'elenco dei formati. In VS2010 questo è d'aiuto.

+0

Grazie. Funziona :) – Marshal

+10

Nota che in VS 2015 (e probabilmente nelle versioni precedenti) devi aggiungere i file '.xaml' uno alla volta. Se hai multiple e selezioni tutto allora non aggiunge i file '.xaml.cs' = ( –

+0

La risposta di Hitesh.P supporta l'aggiunta di più file contemporaneamente. – David

35

Se non è possibile ottenere l'IDE per farlo (post di Papa Giovanni), quindi è possibile farlo modificando il file di progetto.

Tale informazione si trova nel file Csproj (che è un file XML - è possibile aprirlo in un editor di testo, o facendo clic destro su di esso, la scelta di "scaricare", e poi aprirlo - scegliere ricaricare per caricarlo di nuovo come un progetto).

Ecco le informazioni da cercare, è necessario aggiungere il tag "DependentUpon".

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

Il formato del file di progetto dipende di IDE? Se così fosse possibile molti formati diversi per connettere xaml al codice. –

+0

La schermata sopra era VS 2010 (lo si può capire dallo stile dell'albero), quindi ho usato uno snip di un progetto del 2010. Se è necessario una versione diversa, il modo semplice per vedere quello che ti serve è creare un piccolo progetto di test con 1 file xaml, quindi aprire il file di progetto e vedere cosa ha fatto VS. I file dovrebbero essere abbastanza simili per VS 2005 e versioni successive (sono solo file MSBuild.) 2003 e VS.Net originale utilizzava un formato di file diverso. – JMarsch

+0

Ho avuto questo problema in Xamarin Studio (OS X) e questo ha risolto il problema. Grazie! – frijj2k

15

Mi sono imbattuto nello stesso modo. Ho avuto la via d'uscita. Ecco come ottenere i .xaml.cs annidati sotto la XAML in Esplora soluzioni:

  1. In Windows File Explorer (al di fuori di Visual Studio), aprire la cartella in cui i file necessari sono.
  2. Selezionare entrambi i file (.xaml e .xaml.cs) insieme.
  3. Trascinarlo sul nome del progetto in Esplora soluzioni.
  4. Fatto! :)
+0

ok. utile. – Hitsa00

+1

Questo funziona ed è stato molto utile per me, consentendo un maggiore controllo rispetto alla risposta di cui sopra. Non capisco il voto negativo. – jomalden

+1

Lol questa risposta supporta in realtà più file a differenza dei 41 upvotes e risposta accettata ... – David

5

Utilizzando un PCL Soluzione Xamarin:

1) Vai alla cartella PCL e aprire la MySolution.csproj file di

2) Non ci dovrebbero essere diversi gruppi di <ItemGroup> tags. Uno di essi dichiara i tag <EmbeddedResource> e un altro conterrà i gruppi di tag <Compile> <DependentUpon></DependentUpon></Compile>.

3) Per MyPage.xaml e MyPage.xaml.cs file da collegate, è necessario disporre di un gruppo di XMLs che dichiarano la pagina XAML.

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

Si noti che se la pagina è in una cartella è necessario specificare che in questo modo:

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

Si noti che questo funziona con OSX e Windows

2

Utilizzo della soluzione di codice condiviso Xamarin:

1) Vai alla cartella si proietta dopo lo sbarco del progetto condiviso

2) Individuare il file projitems e modificare che l'aggiunta del tag DependentUpon come descritto in altre risposte di cui sopra.

3) Salvare il file

4) Torna alla studio visivo e si dovrebbe ottenere una finestra che permette di ricaricare tutti o solo apre nuovamente il progetto.

2

Basato sul commento di Kyle Bianco sul sito ufficiale Xamarin bug report 55591: .xaml files in .NETStandard library appear twice in solution explorer, ho trovato una semplice soluzione a questo problema all'interno del collegato .NET Standard sample project by Oren Novotny

all'interno del file Csproj, aggiungere il seguente <ItemGroup>:

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

Successivamente, tutti i file xaml all'interno della struttura del progetto verranno visualizzati automaticamente nella finestra Esplora soluzioni ly - anche se aggiungerai nuovi file xaml.

Come funziona questa magia?

Il Compile elemento all'interno del ItemGroup sta usando i caratteri jolly per scorrere tutte le directory, la ricerca di .xaml.cs file e la marcatura come dipendente sui xaml file con lo stesso nome. Si prega di notare che questo funziona solo perché i metadati %(Filename) oggetto utilizzato per la elemento DependentUpon contiene più a sinistra estensione del file, che corrisponde al nome del file xaml per convenzione. Il elemento EmbeddedResource includerà tutti i xaml file al progetto, in modo che siano visibili all'interno della finestra Esplora soluzioni mentre li segna come Designer file, e dichiarando che il UpdateDesignTimeXaml target definito all'interno del pacchetto Xamarin.Forms NuGet dovrebbe essere utilizzato per generare codice dal file di markup.

+0

Questa dovrebbe essere la risposta giusta! – Ugur

0

Una soluzione ancora più semplice e veloce per Xamarin Forms progetti, non c'è bisogno di toccare il file csproj a tutti, soluzione molto veloce.

Accertarsi di aver selezionato Show All Files per soluzione Explorer - può essere attiva per impostazione predefinita.

  1. Selezionare tutti i file interessati
  2. clic destro>Exclude from Project
  3. selezionare nuovamente gli stessi file (dovrebbe essere sbiadito out)
  4. click destro>Include in Project

Dovrebbero ora tutti essere annidati correttamente e tutte le modifiche necessarie al file .csproj verranno eseguite.

È possibile che si verifichi un errore InitializeComponent() does not exist in the current context). Se questo è il caso, la semplice correzione è ..

  • selezionare tutti gli elementi interessati e cambiare Build Action da Page a Embedded Resource
Problemi correlati