Compartilhar via


Dicionários de recursos mesclados (WPF .NET)

Os recursos do Windows Presentation Foundation (WPF) dão 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 ser compartilhados entre aplicativos e são também isolados de modo mais conveniente para localização.

Criar um dicionário mesclado

Na marcação, você pode usar 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 ResourceDictionary elemento não tem uma diretiva x:Key, que geralmente é necessária para todos os itens em uma coleção de recursos. Mas outra ResourceDictionary referência dentro da coleção é um caso especial, reservado MergedDictionaries para esse cenário de dicionário de recursos mesclado. Além disso, o ResourceDictionary que introduz um dicionário de recursos mesclado não pode ter uma diretiva x:Key.

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

Observação

É legal definir recursos dentro de um ResourceDictionary dicionário especificado como um dicionário mesclado, seja como uma alternativa à especificação Sourcede , ou além de quaisquer recursos incluídos da fonte especificada. No entanto, esse 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 de uma página, defina-os no dicionário principal ResourceDictionary e não nos dicionários mesclados.

Comportamento do dicionário mesclado

Os recursos em um dicionário mesclado ocupam um local no escopo de pesquisa de recursos que está logo após o escopo do dicionário de recursos principal em que são mesclados. Embora uma chave de recurso deva ser exclusiva em 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 MergedDictionaries coleção. Se a MergedDictionaries coleção foi definida em XAML, a ordem dos dicionários mesclados na coleção é a ordem dos elementos, conforme fornecido na marcação. 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ódigo mesclados

Os dicionários mesclados podem ser adicionados a um dicionário Resources por meio do código. O padrão, inicialmente vazio, ResourceDictionary que existe para qualquer Resources propriedade também tem uma propriedade de coleção padrão, inicialmente vazia MergedDictionaries . Para adicionar um dicionário mesclado por meio de código, você obtém uma referência ao primário ResourceDictionarydesejado, obtém seu MergedDictionaries valor de propriedade e chama Add o genérico Collection contido em MergedDictionaries. O objeto adicionado deve ser um novo ResourceDictionary.

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

URIs de dicionário mesclados

Há várias técnicas de como incluir um dicionário de recursos mesclado, que são indicadas pelo formato URI (Uniform Resource Identifier) 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 obter 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. Seu recurso deve ser definido como parte do projeto como uma ação de build de recurso . Se você incluir um arquivo .xaml de recurso no projeto como Resource, não precisará copiar o arquivo de recurso para o diretório de saída, o recurso já está incluído no aplicativo compilado. Você também pode usar a ação de build de conteúdo , mas deve copiar os arquivos para o diretório de saída e também implantar os arquivos de recurso na mesma relação de caminho para o executável.

Observação

Não use a ação de build Recurso Incorporado . A ação de build em si tem suporte para aplicativos WPF, mas a resolução de Source não incorpora ResourceManager, e, portanto, não pode separar o recurso individual do fluxo. Você ainda pode usar o Recurso Incorporado para outras finalidades, desde que também tenha usado ResourceManager para acessar os recursos.

Uma técnica relacionada é usar um URI de pacote para um arquivo XAML e se referir a ele como Origem. O URI do pacote permite referências a componentes de assemblies referenciados e outras técnicas. Para obter mais informações sobre URIs de pacote, consulte Arquivos de recursos, conteúdo e dados do aplicativo 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 recurso não compilado é que file: access requer etapas adicionais de implantação e http: access implica a zona de segurança da Internet.

Reutilizar dicionários mesclados

Você pode reutilizar ou compartilhar dicionários de recursos mesclados entre aplicativos, pois o dicionário de recursos a ser mesclado pode ser referenciado por meio de qualquer URI (Uniform Resource Identifier) válido. Exatamente como você faz isso depende da sua estratégia de implantação de aplicativo e de qual modelo de aplicativo você segue. A estratégia de URI do pacote mencionada anteriormente fornece uma maneira de obter 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 no armazenamento compartilhado local é outro cenário possível de dicionário mesclado e implantação de aplicativo.

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. Essa técnica é uma alternativa simples para localizar os assemblies satélite de recursos. Para detalhes, consulte Visão geral de globalização e localização do WPF.

Confira também