Partilhar via


Dicionários de recursos mesclados (WPF .NET)

Os recursos do Windows Presentation Foundation (WPF) oferecem suporte a um recurso de dicionário de recursos mesclados. Esse recurso fornece uma maneira de definir a parte de recursos de um aplicativo WPF fora do aplicativo XAML compilado. Os recursos podem então ser compartilhados entre aplicativos e também são mais convenientemente isolados para localização.

Criar um dicionário mesclado

Na marcação, você usa a seguinte sintaxe para introduzir um dicionário de recursos mesclados em uma página:

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

O elemento ResourceDictionary não tem uma diretiva de chave x:Key , que geralmente é necessária para todos os itens de uma coleção de recursos. Mas outra referência ResourceDictionary dentro da coleção MergedDictionaries é um caso especial, reservado para este cenário de dicionário de recursos combinados. Além disso, o ResourceDictionary que introduz um dicionário de recursos mesclados não pode ter um x:Key Directive.

Normalmente, cada ResourceDictionary dentro da coleção MergedDictionaries especifica um atributo Source. O valor de Source deve ser um identificador de recurso uniforme (URI) que aponta para o endereço do arquivo de recursos a ser integrado. O destino desse URI deve ser outro arquivo XAML, com ResourceDictionary como seu elemento raiz.

Observação

É permitido definir recursos dentro de um ResourceDictionary especificado como um dicionário mesclado, seja como uma alternativa para especificar Sourceou além de quaisquer recursos incluídos da fonte especificada. No entanto, este não é um cenário comum. O cenário principal para dicionários mesclados é mesclar recursos de locais de arquivos externos. Se você quiser especificar recursos dentro da marcação para uma página, defina-os no ResourceDictionary principal e não nos dicionários mesclados.

Comportamento de dicionário mesclado

Os recursos em um dicionário mesclado ocupam um local no escopo de pesquisa de recursos logo após o escopo do dicionário de recursos principal no qual eles são mesclados. Embora uma chave de recurso deva ser exclusiva dentro de qualquer dicionário individual, uma chave pode existir várias vezes em um conjunto de dicionários mesclados. Nesse caso, o recurso retornado virá do último dicionário encontrado sequencialmente na coleção MergedDictionaries. Se a coleção MergedDictionaries tivesse sido definida em XAML, a ordem dos dicionários mesclados na coleção é a ordem dos elementos conforme fornecido no markup. Se uma chave for definida no dicionário primário e também em um dicionário que foi mesclado, o recurso retornado virá do dicionário primário. Essas regras de escopo se aplicam igualmente para referências de recursos estáticos e referências de recursos dinâmicos.

Dicionários e códigos mesclados

Dicionários mesclados podem ser adicionados a um dicionário Resources através de código. A ResourceDictionary padrão, inicialmente vazia, que existe para qualquer propriedade Resources, também tem uma propriedade de coleção MergedDictionaries padrão, inicialmente vazia. Para adicionar um dicionário mesclado através de código, deve-se obter uma referência ao ResourceDictionaryprimário desejado, obter o seu valor de propriedade MergedDictionaries, e invocar Add no Collection genérico que está contido em MergedDictionaries. O objeto que adicionar deve ser um novo ResourceDictionary.

No código, você não define a propriedade Source. Em vez disso, você deve obter um objeto ResourceDictionary criando um ou carregando um. Uma maneira de carregar um ResourceDictionary existente para chamar XamlReader.Load em um fluxo de arquivo XAML existente que tenha uma raiz ResourceDictionary e, em seguida, transmitir o valor de retorno para ResourceDictionary.

URIs de dicionário mesclados

Há várias técnicas para incluir um dicionário de recursos mesclados, que são indicadas pelo formato URI (identificador uniforme de recursos) que você usa. Em termos gerais, essas técnicas podem ser divididas em duas categorias: recursos que são compilados como parte do projeto e recursos que não são compilados como parte do projeto.

Para recursos que são compilados como parte do projeto, você pode usar um caminho relativo que se refere ao local do recurso. O caminho relativo é avaliado durante a compilação. O seu recurso deve ser definido como parte do projeto, como uma ação de compilação de recurso . Se incluíres um ficheiro de recurso .xaml no projeto como Recurso, não precisas de copiar o ficheiro de recurso para o diretório de saída, pois o recurso já está incluído na aplicação compilada. Você também pode usar a ação de construção do Content, mas deve, então, copiar os ficheiros para o diretório de saída e disponibilizar os arquivos de recursos mantendo a mesma relação de caminho do executável.

Observação

Não use a ação de compilação de Recurso Incorporado . A ação de compilação em si é suportada para aplicativos WPF, mas a resolução de Source não incorpora ResourceManagere, portanto, não pode separar o recurso individual fora do fluxo. Você ainda pode usar os Recursos Incorporados para outros fins, desde que também use ResourceManager para aceder aos recursos.

Uma técnica relacionada é usar um de URI do Pack a um arquivo XAML e referir-se a ele como de origem. Pack URI permite referências a componentes de assemblies referenciadas e em outras técnicas. Para obter mais informações sobre URIs do Pack, consulte Recursos, Conteúdo e Ficheiros de Dados da Aplicação WPF.

Para recursos que não são compilados como parte do projeto, o URI é avaliado em tempo de execução. Você pode usar um transporte de URI comum, como file: ou http: para se referir ao arquivo de recurso. A desvantagem de usar a abordagem de recursos não compilados é que arquivo: acesso requer etapas de implantação adicionais e http: acesso implica a zona de segurança da Internet.

Reutilização de dicionários mesclados

Você pode reutilizar ou compartilhar dicionários de recursos mesclados entre aplicativos, porque o dicionário de recursos a ser mesclado pode ser referenciado por meio de qualquer URI (identificador uniforme de recurso) válido. Exatamente como você faz isso depende de sua estratégia de implantação de aplicativo e qual modelo de aplicativo você segue. O mencionado anteriormente estratégia de de URI do Pack fornece uma maneira de geralmente originar um recurso mesclado em vários projetos durante o desenvolvimento compartilhando uma referência de assembly. Nesse cenário, os recursos ainda são distribuídos pelo cliente e pelo menos um dos aplicativos deve implantar o assembly referenciado. Também é possível fazer referência a recursos mesclados por meio de um URI distribuído que usa o protocolo http:.

Escrever dicionários mesclados como arquivos de aplicativo local ou para armazenamento compartilhado local é outro possível cenário de implantação de aplicativo e dicionário mesclado.

Localização

Se os recursos que precisam ser localizados forem isolados em dicionários mesclados em dicionários primários e mantidos como XAML solto, esses arquivos poderão ser localizados separadamente. Esta técnica é uma alternativa leve para localizar os conjuntos de recursos de satélite. Para obter detalhes, consulte Visão geral da globalização e localização do WPF.

Ver também