Partilhar via


x:Atributo compartilhado

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 de atributos XAML

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

Comentários

x:Shared é mapeado para o namespace XAML da linguagem XAML e é reconhecido como um elemento de linguagem XAML válido pelos Serviços XAML .NET e seus leitores XAML. No entanto, os recursos declarados do x:Shared só são relevantes para aplicativos WPF e para o analisador WPF XAML. No WPF, x:Shared só é útil como um atributo quando é aplicado a um objeto que existe dentro de um WPF ResourceDictionary. Outros usos não lançam 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 em Serviços XAML .NET, não fornecem necessariamente suporte ao 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 sempre retorna a mesma instância.

Modificar um objeto que é retornado por meio de uma API de recurso, como FindResource, ou modificar um objeto diretamente dentro de um ResourceDictionary, altera o recurso original. Se as referências a esse recurso fossem referências de recursos dinâmicos, os consumidores desse recurso obteriam o recurso alterado.

Se as referências ao recurso forem referências estáticas, 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 recursos XAML (WPF .NET).

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

Um cenário para x:Shared="false" é se você definir uma classe derivada FrameworkElement ou FrameworkContentElement 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.

A manipulação 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:

Ver também