Share via


Dizionari risorse uniti

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 nelle applicazioni, oltre che isolate più facilmente per la localizzazione.

Introduzione di un dizionario risorse unito

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. Ma un altro ResourceDictionary riferimento all'interno della MergedDictionaries raccolta è un caso speciale, riservato per questo scenario di dizionario risorse unito. L'oggetto ResourceDictionary che introduce un dizionario risorse unito non può avere una direttiva x:Key. In genere, ogni oggetto ResourceDictionary all'interno della MergedDictionaries raccolta specifica un Source attributo . Il valore di Source deve essere un URI (Uniform Resource Identifier) che si risolve nel percorso del file di risorse da unire. La destinazione di tale URI deve essere un altro file XAML, con ResourceDictionary come elemento radice.

Nota

È legale definire le risorse all'interno di un ResourceDictionary oggetto specificato come dizionario unito, in alternativa a specificare Sourceo oltre a qualsiasi risorsa inclusa dall'origine specificata. ma questo non è uno scenario comune. Lo scenario principale per i dizionari uniti prevede l'unione delle risorse da percorsi di file esterni. Se si desidera specificare le risorse all'interno del markup per una pagina, in genere è consigliabile definirli nei dizionari principali ResourceDictionary e non nei dizionari uniti.

Comportamento dei dizionari uniti

Le risorse in un dizionario unito fanno parte dell'ambito della ricerca di risorse, che segue immediatamente l'ambito del dizionario risorse principale in cui vengono unite. Anche se una chiave di risorsa deve essere univoca in ogni 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 MergedDictionaries raccolta. Se la MergedDictionaries raccolta è 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 ugualmente sia ai riferimenti a risorse statiche che ai riferimenti a risorse dinamiche.

Dizionari uniti e codice

I dizionari uniti possono essere aggiunti a un dizionario Resources tramite il codice. Il valore predefinito inizialmente vuoto ResourceDictionary esistente per qualsiasi Resources proprietà ha anche una proprietà di raccolta inizialmente vuota MergedDictionaries predefinita. Per aggiungere un dizionario unito tramite codice, si ottiene un riferimento all'oggetto primario ResourceDictionarydesiderato, si ottiene il MergedDictionaries valore della proprietà e si chiama Add sul generico Collection contenuto in MergedDictionaries. L'oggetto aggiunto deve essere un nuovo ResourceDictionaryoggetto . Nel codice non si imposta la Source proprietà . È invece necessario ottenere un ResourceDictionary oggetto creando uno o caricandolo. Un modo per caricare un oggetto esistente da chiamare su un flusso di file XAML esistente ResourceDictionary con una ResourceDictionary radice, quindi eseguire il cast del XamlReader.Load valore restituito su ResourceDictionary.XamlReader.Load

URI di dizionari risorse uniti

Esistono diverse tecniche per includere un dizionario risorse unito, indicato dal formato URI (Uniform Resource Identifier) che verrà usato. In generale, queste tecniche si possono suddividere in due categorie: risorse compilate come parte del progetto e 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 nell'ambito del progetto come azione di compilazione Risorsa. Se si include un file di risorse XAML nel progetto come risorsa, non è necessario copiare il file di risorse nella directory di output, perché la risorsa è già inclusa nell'applicazione compilata. È anche possibile usare un'azione di compilazione Contenuto, ma è necessario copiare i file nella directory di output e distribuire i file di risorse nella stessa relazione percorso con l'eseguibile.

Nota

Non usare l'azione di compilazione Risorsa incorporata. L'azione di compilazione è supportata per le applicazioni WPF, ma la risoluzione di Source non incorpora ResourceManagere pertanto non può separare la singola risorsa dal flusso. È comunque possibile usare la risorsa incorporata per altri scopi, purché sia stato usato ResourceManager anche per accedere alle risorse.

Una tecnica correlata consiste nell'usare un URI pack per un file XAML e farvi riferimento come Origine. Un URI di tipo pack abilita i riferimenti ai componenti degli assembly a cui si fa riferimento e altre tecniche. Per altre informazioni sugli URI di tipo pack, vedere File di dati e di risorse 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 nell'uso dell'approccio delle risorse non compilate è che l'accesso file: richiede altri passaggi per la distribuzione e l'accesso http: implica la zona di sicurezza Internet.

Riutilizzo dei 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. La scelta del modo per procedere dipenderà dalla strategia di distribuzione dell'applicazione e dal modello di applicazione seguito. La suddetta strategia basata sugli URI di tipo pack consente di originare a livello comune una risorsa unita in più progetti durante lo sviluppo condividendo un riferimento ad 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 alle risorse unite tramite un URI distribuito che usa il protocollo http.

La scrittura di dizionari uniti come file dell'applicazione locali o nello spazio di archiviazione condiviso locale è un altro possibile scenario di distribuzione dell'applicazione/dizionari uniti.

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 degli assembly di risorse satellite. Per informazioni dettagliate, vedere Panoramica della globalizzazione e localizzazione WPF.

Vedi anche