Bene, dopo un po 'di tentativi e ricerche ho trovato una soluzione alla mia domanda. Sembra che frammenti della mia risposta siano stati sparsi per tutto il web, quindi cercherò di spiegare tutto in una volta, in un posto. Per ricapitolare, sostanzialmente volevo centralizzare le risorse utilizzate nei progetti all'interno della mia soluzione. Questi sono i passi che alla fine ho seguito per realizzare questo.
1. Creare un progetto di controllo utente nella soluzione (qualsiasi progetto che può ospitare Dizionari risorsa farà). Mi riferirò a questo progetto come "il progetto della risorsa".
2. Aggiungere qualsiasi file di risorse (immagini ecc.) Che si desidera condividere tra progetti e il progetto di risorsa. Cerco di organizzare i file in sottodirectory che hanno senso. Dovrai impostare l'azione di compilazione su "Risorsa" in modo che venga compilata nel file binario di output.
3. Ora aggiungere un dizionario di risorse al progetto di risorse. Nel mio caso ho voluto fare riferimento a diverse immagini, quindi ne ho creato uno chiamato "ImageDictionary.xaml".
4. Aggiungere riferimenti ai file di immagine nel dizionario risorse. Qui sto facendo riferimento alle immagini ma è solo un dizionario delle risorse, puoi inserire qualsiasi cosa lì dentro. La stringa nel mezzo è solo il percorso relativo al file immagine a cui ti stai riferendo.
<ImageSource x:Key="SomeImageKey">
Images/SomeImage.bmp
</ImageSource>
5. Passare ad un progetto che richiede il dizionario risorse che hai appena fatto al punto 4. Può essere un altro controllo utente o una finestra, a prescindere. Fare clic con il tasto destro sui riferimenti del progetto e aggiungere un riferimento al progetto di risorse.
6. OK ora il progetto corrente deve fare riferimento al dizionario che hai fatto nel passaggio 4 che è definito nel progetto di risorsa. Ho creato un controllo utente per primo, ecco come sarebbe il mio codice qui sotto ... Nota che ho usato i dizionari uniti. Ho intenzione di usarne più tardi, quindi ho scelto questo modo invece di un singolo dizionario. "ResourceProject" di seguito è il nome del progetto/assembly a cui è stata aggiunta la risorsa. "componente" è una parola chiave che deve essere presente, seguita dal percorso del file di codice xaml del dizionario.
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/ResourceProjectAssembly;component/Resources/ImageDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
Come si può vedere, il riferimento a un dizionario di risorse esterno richiede qualcosa chiamato "URI di pacchetto". Ho trovato un modo breve di farlo. La lunga strada è un po 'più brutta e, per quanto ne so, non vi è alcun vantaggio. Ma ecco come appare la lunga strada.
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ResourceProjectAssembly;component/Resources/ImageDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
7. Ora che il progetto attuale ha un riferimento al dizionario risorse nel progetto di risorse, è possibile utilizzare qualsiasi cosa, da quel dizionario. Sono andato avanti e ho messo un'immagine nel mio controllo utente. Di seguito è riportato il codice. È proprio come fare riferimento a un dizionario localmente.
<Image Source="{StaticResource SomeImageKey}" />
8. Nota importante! Questo mi ha causato mal di testa per un po 'prima che lo trovassi. Assicurati che il progetto di avvio nella tua soluzione abbia un riferimento al progetto delle risorse ANCHE SE IL PROGETTO DI AVVIO NON UTILIZZA IL PROGETTO RISORSE. (I riferimenti del clic destro, aggiungere riferimenti ecc ...) Le risorse non verranno compilate nell'output a meno che non lo facciate. Questa parte è stata complicata perché il progettista mostrava persino le mie immagini e non avevo errori xaml, ma in fase di esecuzione generava la proprietà set e non trovava eccezioni ai file. Questo è andato via quando ho fatto riferimento al mio progetto di risorse dal mio progetto di avvio.
Speriamo che questo aiuti qualcuno. Di seguito sono riportati alcuni collegamenti a pochi posti (incluso lo stackoverflow) che mi hanno dato ciò di cui avevo bisogno per mettere insieme tutti i pezzi.
http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/03/creating-and-consuming-resource-dictionaries-in-wpf-and-silverlight.aspx
Load WPF styles or other Static Resources from an external file or assembly
ResourceDictionary in a separate assembly
eccellente po 'di ricerca lì. Proprio quello di cui avevo bisogno +1. – Andez
Grazie mille, non ho potuto farlo funzionare prima, perché mi mancava il passaggio 8 :(. Ma ora funziona, brillante :) – adminSoftDK
posso aggiungere nel dizionario delle risorse? –
bigworld12