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>
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 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 WPF. 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 eles não têm efeito.
O significado de não é especificado na especificação da x:Shared
linguagem XAML. Outras implementações XAML, como aquelas que se baseiam nos Serviços XAML do .NET, não fornecem necessariamente suporte ao compartilhamento de recursos. Essas implementações XAML poderiam fornecer comportamento semelhante na estrutura de suporte que também usava x:Shared
valores.
No WPF, a condição padrão x:Shared
para recursos é true
. Essa condição significa que qualquer solicitação de recurso específica 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 fossem referências dinâmicas de recursos, os consumidores desse recurso obteriam o recurso alterado.
Se as referências ao recurso fossem referências de recursos estáticos, as alterações no recurso após o tempo de processamento do XAML seriam irrelevantes. Para obter mais informações sobre referências de recursos estáticos versus dinâmicos, consulte Visão geral de recursos XAML (WPF .NET).
Especificar x:Shared="true"
explicitamente raramente é feito, porque esse já é o padrão. Não há equivalente de código direto 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 carga, se processado usando os Serviços XAML do .NET e seus leitores XAML.
Um cenário para x:Shared="false"
é se você definir uma FrameworkElement classe ou FrameworkContentElement 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 x:Shared="false"
comportamento cria outra instância idêntica do recurso em vez de retornar a mesma instância.
Outro cenário para é se você usar um Freezable recurso para x:Shared="false"
valores de animação, mas quiser modificar o recurso em uma base por animação.
O tratamento de cadeia de caracteres de não diferencia maiúsculas de false
minúsculas.
No WPF, x:Shared
só é válido nas seguintes condições:
O ResourceDictionary que contém os itens com
x:Shared
deve ser compilado. O ResourceDictionary não pode estar dentro de XAML solto ou usado para temas.O ResourceDictionary que contém os itens não deve ser aninhado em outro ResourceDictionary. Por exemplo, você não pode usar
x:Shared
para itens em um que está dentro de um que já é um ResourceDictionaryStyleResourceDictionary item.
Confira também
.NET Desktop feedback