2009-12-18 25 views
6

Ho una libreria di classi Silverlight (non un'applicazione di primo livello) con diversi controlli utente condivisi da diverse applicazioni Silverlight. Ho esaminato e estratto diversi stili e pennelli per i controlli e li ho inseriti in un file XAML separato come un dizionario di risorse che porto in ogni controllo come un dizionario di risorse unito. In questo momento funziona perfettamente nelle mie applicazioni di alto livello, a condizione che mantenga il dizionario delle risorse come azione di compilazione "Risorsa" e faccia riferimento in tal modo ai controlli.Packaging ResourceDictionary per Silverlight Class Library

Quello che mi piacerebbe veramente fare è avere questo file XAML del dizionario delle risorse come azione di costruzione "Contenuto" che viene copiato nell'XAP di livello superiore, in modo che lo XAML possa essere scambiato nel file XAP senza necessità di ricostruire il progetto. Ogni volta che cerco di impostarlo, il file XAML verrà copiato nel raccoglitore di uscita per il progetto della libreria di classi, ma non verrà mai copiato nella directory di output del progetto dell'applicazione Silverlight di primo livello o nel file XAP finale.

Qual è il modo migliore per realizzare questo? Il dizionario di risorse XAML è essenzialmente una dipendenza della libreria di classi e la libreria di classi (di controlli utente) è una dipendenza dell'applicazione Silverlight di primo livello.

risposta

1

Aggiungere il ControlResources.xaml (la ResourceDictionary che volete nella vostra XAP) al livello superiore XAP progetto come collegamento tramite Progetto-> Aggiungi elemento esistente-> Aggiungi come collegamento (un elemento a discesa sul pulsante Aggiungi nella finestra di dialogo), e impostalo anche come contenuto.

+0

Questo sembra il miglior approccio possibile, solo un po 'fastidioso avere sia un riferimento a una libreria di classi Silverlight sia un collegamento a uno dei suoi file di output nell'app silverlight. Indovina che questo è l'unico modo per ottenere l'XAP senza alcuni hackery di riconfezionamento post-build post-build. –

+0

Dopo aver provato altre cose, questo approccio funziona bene in fase di esecuzione ma non sembra essere "Miscelabile". Quando apri l'app Silverlight di livello superiore in Expression Blend, ricevo un sacco di errori ... sembra che Blend non possa seguire i collegamenti nel progetto al ResourceDictionary per la libreria delle classi di controlli. Qualche idea su come ottenere che Blend giochi bene? Questa soluzione non la taglierà se non posso mai aprire correttamente il progetto su Blend. –

0
+0

I dizionari delle risorse unite sono ciò che sto utilizzando, quindi salva gli stili e i pennelli in un file XAML separato, il problema è che il dizionario fa parte della mia libreria di classi Silverlight condivisa, non di un'applicazione Silverlight. Quando imposto l'azione di creazione su Contenuto e Copia sempre, non viene mai copiata nel file XAP delle mie applicazioni. Sto solo cercando di trovare il modo migliore per pacchettizzare e fare riferimento a una risorsa da una libreria di classi dipendente nell'XAP finale. –

+0

dai un'occhiata ai file di risorse unite cross project a http://thoughtjelly.blogspot.com/2009/10/cross-project-mergeddictionaries-in.html –

+1

Il PO specificato l'obiettivo era quello di essere in grado di scambiare la risorsa condivisa File XAML fuori dal file XAP senza ricostruzione. La strategia di assemblaggio delle risorse condivisa a cui si fa riferimento nel post di Mark non sembra che possa raggiungere questo obiettivo. Per scambiare questo XAML senza ricostruzione, sarebbe necessario che fosse un file di contenuto in XAP (non compilato in un assieme). L'unico modo che conosco per ottenere ciò è con un oggetto di costruzione "Contenuto" nel progetto di Silverlight in fase di creazione - quindi l'elemento file di progetto collegato è la strada da percorrere qui. –