Compartilhar via


Atributo x:Shared

Quando definido como false, modifica o comportamento de recuperação de recursos do WPF para que as solicitações para o recurso atribuído criem uma nova instância para cada solicitação em vez de compartilhar a mesma instância para todas as solicitações.

Uso do atributo XAML

<ResourceDictionary>
  <object x:Shared="false".../>
</ResourceDictionary>

Observações

x:Shared é mapeado para o namespace XAML da linguagem XAML e é reconhecido como um elemento de linguagem XAML válido pelos Serviços XAML do .NET e seus leitores XAML. No entanto, os recursos declarados de x:Shared são relevantes apenas para aplicativos WPF e para o analisador XAML do WPF. No WPF, x:Shared só é útil como um atributo quando é aplicado a um objeto que existe em um ResourceDictionaryWPF. Outros usos não geram exceções de análise ou outros erros, mas não têm efeito.

O significado de x:Shared não é especificado na especificação da linguagem XAML. Outras implementações XAML, como aquelas que se baseiam nos Serviços XAML do .NET, não fornecem necessariamente suporte de compartilhamento de recursos. Essas implementações XAML podem fornecer um comportamento semelhante na estrutura de suporte que também usou valores x:Shared.

No WPF, a condição de x:Shared padrão para recursos é true. Essa condição significa que qualquer solicitação de recurso fornecida sempre retorna a mesma instância.

Modificar um objeto retornado por meio de uma API de recurso, como FindResource, ou modificar um objeto diretamente em um ResourceDictionary, altera o recurso original. Se as referências a esse recurso forem referências dinâmicas de recurso, os consumidores desse recurso receberão o recurso alterado.

Se as referências ao recurso forem referências de recursos estáticos, as alterações no recurso após o tempo de processamento XAML serão irrelevantes. Para obter mais informações sobre referências de recursos estáticos versus dinâmicos, consulte Visão geral dos recursos XAML (WPF .NET).

Especificar explicitamente x:Shared="true" raramente é feito, porque esse já é o padrão. Não há nenhum equivalente de código direto para x:Shared no modelo de objeto do WPF; ele só pode ser especificado em um uso XAML e deve ser processado pelo comportamento padrão do WPF ou em um fluxo de nó XAML intermediário no caminho de carga se processado usando os Serviços XAML do .NET e seus leitores XAML.

Um cenário para x:Shared="false" é se você definir um FrameworkElement ou FrameworkContentElement classe derivada como um recurso e, em seguida, introduzir o recurso de elemento em um modelo de conteúdo. x:Shared="false" permite que um recurso de elemento seja introduzido várias vezes na mesma coleção (como um UIElementCollection). Sem x:Shared="false" isso é inválido porque a coleção impõe a exclusividade de seu conteúdo. No entanto, o comportamento x:Shared="false" cria outra instância idêntica do recurso em vez de retornar a mesma instância.

Outro cenário para x:Shared="false" é se você usar um recurso Freezable para valores de animação, mas quiser modificar o recurso por animação.

O tratamento de cadeia de caracteres de false não diferencia maiúsculas de minúsculas.

No WPF, x:Shared só é válido nas seguintes condições:

Consulte também