Dizionari di risorse unificati
Le risorse di Windows Presentation Foundation (WPF) supportano una funzionalità di dizionario risorse unita. Questa funzionalità consente di definire la parte delle risorse di un'applicazione WPF all'esterno dell'applicazione XAML compilata. Le risorse possono quindi essere condivise tra applicazioni e sono anche più facilmente isolate per la localizzazione.
Introduzione a un dizionario delle risorse unificato
Nel markup si usa la sintassi seguente per introdurre un dizionario risorse unito in una pagina:
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="myresourcedictionary.xaml"/>
<ResourceDictionary Source="myresourcedictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
Si noti che l'elemento ResourceDictionary non dispone di una direttiva x:Key , generalmente necessaria per tutti gli elementi di una raccolta di risorse. Tuttavia, un altro riferimento ResourceDictionary all'interno della raccolta MergedDictionaries è un caso particolare, riservato a questo scenario di dizionario risorse unito. Il ResourceDictionary che introduce un dizionario risorse unito non può avere una direttiva x:Key . In genere, ogni ResourceDictionary all'interno dell'insieme MergedDictionaries specifica un attributo Source. Il valore di Source deve essere un URI (Uniform Resource Identifier) che rimanda al percorso del file di risorse da unire. La destinazione dell'URI deve essere un altro file XAML, con ResourceDictionary come elemento radice.
Nota
È legale definire le risorse all'interno di un ResourceDictionary specificato come dizionario unito, in alternativa a specificare Sourceo oltre a qualsiasi risorsa inclusa dall'origine specificata. Tuttavia, questo non è uno scenario comune; lo scenario principale per i dizionari uniti consiste nell'unire le risorse da percorsi di file esterni. Se si desidera specificare le risorse all'interno del markup per una pagina, in genere si dovrebbero definirle nel ResourceDictionary principale e non nei dizionari uniti.
Comportamento del dizionario unito
Le risorse in un dizionario unito occupano una posizione nell'ambito di ricerca delle risorse subito dopo l'ambito del dizionario delle risorse principale in cui sono stati uniti. Anche se una chiave di risorsa deve essere univoca all'interno di qualsiasi singolo dizionario, una chiave può esistere più volte in un set di dizionari uniti. In questo caso, la risorsa restituita proviene dall'ultimo dizionario trovato in sequenza nella raccolta MergedDictionaries. Se la raccolta MergedDictionaries è stata definita in XAML, l'ordine dei dizionari uniti nella raccolta è l'ordine degli elementi forniti nel markup. Se una chiave viene definita nel dizionario primario e anche in un dizionario unito, la risorsa restituita proviene dal dizionario primario. Queste regole di ambito si applicano allo stesso modo per i riferimenti a risorse statiche e per i riferimenti a risorse dinamiche.
Dizionari uniti e codice
I dizionari uniti possono essere aggiunti a un dizionario Resources
tramite codice. Il valore predefinito, inizialmente vuoto, ResourceDictionary, che esiste per qualsiasi proprietà Resources
, ha anche una proprietà di raccolta MergedDictionaries, anch'essa predefinita e inizialmente vuota. Per aggiungere un dizionario unito tramite codice, ottenere un riferimento al ResourceDictionaryprimario desiderato, ottenere il valore della proprietà MergedDictionaries e chiamare Add
sul Collection
generico contenuto in MergedDictionaries. L'oggetto aggiunto deve essere un nuovo ResourceDictionary. Nel codice non si imposta la proprietà Source. È invece necessario ottenere un oggetto ResourceDictionary creando uno o caricandolo. Un modo per caricare un ResourceDictionary esistente è chiamare XamlReader.Load su un flusso di file XAML esistente che ha una radice ResourceDictionary, e quindi eseguire il cast del valore di ritorno XamlReader.Load a ResourceDictionary.
URI del Dizionario di Risorse Combinato
Esistono diverse tecniche per includere un dizionario risorse unito, indicato dal formato URI (Uniform Resource Identifier) che verrà usato. In generale, queste tecniche possono essere suddivise in due categorie: le risorse compilate come parte del progetto e le risorse non compilate come parte del progetto.
Per le risorse compilate come parte del progetto, è possibile usare un percorso relativo che fa riferimento alla posizione della risorsa. Il percorso relativo viene valutato durante la compilazione. La risorsa deve essere definita nel progetto come un'azione di creazione della risorsa. Se si include un file xaml di risorse nel progetto come risorsa, non è necessario copiare il file di risorse nella directory di output, la risorsa è già inclusa nell'applicazione compilata. È inoltre possibile utilizzare l'azione di compilazione del contenuto, ma è necessario copiare i file nella directory di output e distribuire i file di risorse mantenendo la stessa relazione di percorso rispetto all'eseguibile.
Nota
Non usare l'azione di compilazione della risorsa integrata. L'azione di build è supportata per le applicazioni WPF, ma la risoluzione di Source non incorpora ResourceManagere pertanto non può estrarre la singola risorsa dal flusso. È comunque possibile usare la risorsa incorporata per altri scopi, purché sia stato usato anche ResourceManager per accedere alle risorse.
Una tecnica correlata consiste nell'usare un URI pack per un file XAML e farvi riferimento come Origine. L'URI pack consente riferimenti ai componenti di assembly a cui si fa riferimento e ad altre tecniche. Per maggiori informazioni sui Pack URI, vedere risorse, contenuto e file di dati dell'applicazione WPF.
Per le risorse non compilate come parte del progetto, l'URI viene valutato in fase di esecuzione. È possibile usare un trasporto URI comune, ad esempio file: o http: per fare riferimento al file di risorse. Lo svantaggio di usare l'approccio alle risorse non compilate è che l'accesso file: richiede passaggi di distribuzione aggiuntivi e l'accesso http: implica la zona di sicurezza Internet.
Riutilizzo di dizionari uniti
È possibile riutilizzare o condividere dizionari risorse uniti tra applicazioni, perché è possibile fare riferimento al dizionario risorse da unire tramite qualsiasi URI (Uniform Resource Identifier) valido. Esattamente come eseguire questa operazione dipenderà dalla strategia di distribuzione dell'applicazione e dal modello di applicazione seguito. La strategia dell'URI pack precedente consente di creare in genere una risorsa unita tra più progetti durante lo sviluppo condividendo un riferimento all'assembly. In questo scenario le risorse vengono ancora distribuite dal client e almeno una delle applicazioni deve distribuire l'assembly di riferimento. È anche possibile fare riferimento a risorse unite tramite un URI distribuito che usa il protocollo HTTP.
La scrittura di dizionari uniti come file dell'applicazione locale o nell'archiviazione condivisa locale è un altro possibile scenario di distribuzione del dizionario/applicazione unito.
Localizzazione
Se le risorse che devono essere localizzate sono isolate in dizionari uniti in dizionari primari e mantenute come XAML separati, questi file possono essere localizzati separatamente. Questa tecnica è un'alternativa leggera alla localizzazione delle raccolte di risorse satelliti. Per informazioni dettagliate, vedere la panoramica su globalizzazione e localizzazione di WPF .
Vedere anche
.NET Desktop feedback