8

Quando si condivide codice tra WinRT e WP8:XAML clr-namespace - utilizzo incompatibilità?

WP8 vuole:

xmlns:vm="clr-namespace:MyApp.ViewModels" 

WinRT vuole:

xmlns:vm="using:MyApp.ViewModels" 

Questo significa che non è possibile condividere il codice XAML - come controlli utente - tra i progetti il modo in cui abbiamo potuto in WP7, Silverlight, WPF

Qualcuno ha trovato un lavoro intorno? L'attributo XmlnsDefinition sembrava che potesse risolvere il problema, ma MS l'ha tolto da WinRT.

+0

La condivisione XAML era possibile solo tra WP7/SL/WPF mantenendo effettivamente copie separate del file XAML in ogni progetto, quindi "condivisione" è un po 'impropria. Questo in realtà è cambiato un po 'con l'avvento delle librerie di classi portatili, sebbene tu fossi limitato a lavorare con tipi e metodi che erano presenti su tutte le piattaforme di destinazione. In questo caso, dal momento che la condivisione era solo della varietà "copia il testo", puoi continuare a farlo (con l'eccezione che dovrai regolare gli "utilizzi" per WinRT). – dlev

+0

Non hai bisogno per copiare i file, puoi semplicemente aggiungerli come file collegato, quindi devi solo mantenere un file. Con questo cambiamento ovviamente non è più possibile. – Kenneth

+1

In realtà, in WP7/SL/WPF se ci si attiene ai controlli di base è possibile condividere XAML. Il trucco è mettere il tuo xaml principale in usercontrols. Gli usercontrols possono quindi essere condivisi come link in ogni progetto VS. Quindi definire una pagina o una finestra o qualsiasi altra cosa in ogni progetto che incorpora l'usercontrol. – jlo

risposta

0

Ho appena fatto un po 'in Windows Phone 8 e anche se l'editor lo converte di default in clr-namespace puoi ancora cambiarlo in using e funzionerà.

1

Questo problema, insieme con le soluzioni alternative limitate, è spiegato in dettaglio qui: http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj714088(v=vs.105).aspx

  • XAML su Windows Phone 8 e XAML su Windows 8 non è compatibile a livello binario. Come detto in precedenza, i controlli che utilizzi per costruire l'interfaccia utente su ciascuna piattaforma sono simili. Sono simili per nome, comportamento e le interfacce di programmazione, o la sintassi, che espongono. Tuttavia, sono implementati specificamente per ogni piattaforma.
  • I prefissi dei nomi dei siti sono diversi in XAML per Windows Phone 8 e XAML per Windows 8. Ciò viene illustrato osservando gli spazi dei nomi inclusi in una pagina di base quando lo si crea da zero. [...] Confrontando queste importazioni di spazi dei nomi, è possibile vedere la differenza significativa ma significativa di come viene importato uno spazio dei nomi. In Windows Telefono 8, gli spazi dei nomi importati sono preceduti da clr-namespace :. In , gli spazi dei nomi di Windows 8 importati sono preceduti dall'uso di :. Questo rende lo difficile da usare lo stesso XAML, a meno che non sia possibile importare spazi dei nomi usando la stessa sintassi .
  • XAML non supporta la compilazione condizionale. Come mostrato nella compilazione condizionale con le direttive del preprocessore, la compilazione condizionale è una tecnica utile per gestire le differenze della piattaforma compilando in un percorso di codice che indirizza una particolare piattaforma e un altro percorso di codice durante la compilazione per un'altra piattaforma. Ciò rende difficile la condivisione di una pagina XAML tra entrambe le piattaforme, perché non è possibile risolvere il problema precedente semplicemente con condizionale compilazione in importazioni di spazio dei nomi che utilizzano clr-namespace per Windows Telefono 8 e utilizzando: per Windows 8.

questo non dovrebbe essere visto come un posto di blocco completo per la condivisione tra Windows Phone 8 e Windows 8. il chiaro orientamento è quello di progettare e costruire la vostra interfaccia utente separatamente per ogni piattaforma, abbracciando il design linee guida per ciascuna. È tecnicamente possibile aggirare questi ostacoli . È possibile creare l'interfaccia utente durante l'inizializzazione della pagina dal codice . È possibile caricare XAML specifico della piattaforma dalle risorse in fase di esecuzione e inserirlo come una stringa nella pagina.Tuttavia, nessuna di queste tecniche scala e rendono possibile la costruzione del tuo asset principale: come l'app guarda all'utente: un'attività noiosa e soggetta a errori. Il tuo codice investimento condivisione vi darà un ritorno molto più grande, più in basso vostro stack app, cercando di condividere la logica app, modelli di dati, ViewModels, ecc

[...] Una tecnica per la condivisione di interfaccia utente che può essere utile in alcune circostanze consiste nell'isolare parti dell'interfaccia utente nei controlli utente e tentare di condividere quelli . [...] Tuttavia, a causa delle limitazioni richiamate all'inizio di questa discussione su , la tecnica è limitata ai controlli utente di base . Oltre a queste limitazioni, dovresti considerare la linea guida per costruire sempre la tua esperienza utente in base alla piattaforma target . La condivisione dei controlli XAML è possibile ma limitata. Un buon candidato per questo tipo di condivisione è l'interfaccia utente che si desidera visualizzare in una finestra pop-up o altri widget che si desidera condividere perché in genere saranno composti da elementi dell'interfaccia utente di base senza XAML complesso e con uno stile semplice .