Attributo x:Shared
Se impostato su false
, modifica il comportamento di recupero delle risorse WPF in modo che le richieste per la risorsa con attributi creino una nuova istanza per ogni richiesta anziché condividere la stessa istanza per tutte le richieste.
Utilizzo degli attributi XAML
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
Osservazioni
x:Shared
viene eseguito il mapping allo spazio dei nomi XAML del linguaggio XAML e viene riconosciuto come elemento del linguaggio XAML valido dai servizi XAML .NET e dai relativi lettori XAML. Tuttavia, le funzionalità indicate di x:Shared
sono rilevanti solo per le applicazioni WPF e per il parser XAML WPF. In WPF x:Shared
è utile solo come attributo quando viene applicato a un oggetto esistente all'interno di un ResourceDictionaryWPF . Altri utilizzi non generano eccezioni di analisi o altri errori, ma non hanno alcun effetto.
Il significato di x:Shared
non è specificato nella specifica del linguaggio XAML. Altre implementazioni XAML, ad esempio quelle basate su servizi XAML .NET, non forniscono necessariamente il supporto per la condivisione delle risorse. Tali implementazioni XAML potrebbero fornire un comportamento simile nel framework di supporto che usava anche valori x:Shared
.
In WPF la condizione di x:Shared
predefinita per le risorse è true
. Questa condizione indica che qualsiasi richiesta di risorsa specificata restituisce sempre la stessa istanza.
La modifica di un oggetto restituito tramite un'API di risorsa, ad esempio FindResourceo la modifica di un oggetto direttamente all'interno di un ResourceDictionary, modifica la risorsa originale. Se i riferimenti a tale risorsa erano riferimenti a risorse dinamiche, i consumer di tale risorsa ottengono la risorsa modificata.
Se i riferimenti alla risorsa erano riferimenti a risorse statiche, le modifiche apportate alla risorsa dopo il tempo di elaborazione XAML sono irrilevanti. Per altre informazioni sui riferimenti alle risorse statiche e dinamiche, vedere Panoramica delle risorse XAML (WPF .NET).
La specifica esplicita di x:Shared="true"
viene eseguita raramente, perché è già l'impostazione predefinita. Non esiste alcun codice diretto equivalente per x:Shared
nel modello a oggetti WPF; può essere specificato solo in un utilizzo XAML e deve essere elaborato dal comportamento WPF predefinito o in un flusso di nodi XAML intermedio nel percorso di caricamento se elaborato usando i servizi XAML .NET e i relativi lettori XAML.
Uno scenario per x:Shared="false"
è se si definisce una classe FrameworkElement o FrameworkContentElement derivata come risorsa e quindi si introduce la risorsa elemento in un modello di contenuto.
x:Shared="false"
consente di introdurre più volte una risorsa elemento nella stessa raccolta, ad esempio un UIElementCollection. Senza x:Shared="false"
questo valore non è valido perché la raccolta applica l'univocità del relativo contenuto. Tuttavia, il comportamento x:Shared="false"
crea un'altra istanza identica della risorsa anziché restituire la stessa istanza.
Un altro scenario per x:Shared="false"
è se si usa una risorsa Freezable per i valori di animazione, ma si vuole modificare la risorsa in base all'animazione.
La gestione delle stringhe di false
non fa distinzione tra maiuscole e minuscole.
In WPF x:Shared
è valido solo nelle condizioni seguenti:
Il ResourceDictionary che contiene gli elementi con
x:Shared
deve essere compilato. Il ResourceDictionary non può essere all'interno di XAML libero o usato per i temi.Il ResourceDictionary che contiene gli elementi non deve essere annidato in un altro ResourceDictionary. Ad esempio, non è possibile utilizzare
x:Shared
per gli elementi in un ResourceDictionary che si trova all'interno di un Style che è già un elemento ResourceDictionary.
Vedere anche
.NET Desktop feedback