x:Delat attribut
När inställningen är inställd på false
ändrar du WPF-resurshämtningsbeteendet så att begäranden för den tilldelade resursen skapar en ny instans för varje begäran i stället för att dela samma instans för alla begäranden.
XAML-attributanvändning
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
Anmärkningar
x:Shared
mappas till XAML-språkets XAML-namnområde och identifieras som ett giltigt XAML-språkelement av .NET XAML Services och dess XAML-läsare. De angivna funktionerna i x:Shared
är dock endast relevanta för WPF-program och för WPF XAML-parsern. I WPF är x:Shared
endast användbart som ett attribut när det tillämpas på ett objekt som finns i en WPF-ResourceDictionary. Andra användningar utlöser inte parsningsfel eller andra fel, men de har ingen effekt.
Innebörden av x:Shared
anges inte i XAML-språkspecifikationen. Andra XAML-implementeringar, till exempel de som bygger på .NET XAML-tjänster, ger inte nödvändigtvis stöd för resursdelning. Sådana XAML-implementeringar kan ge liknande beteende i det stödjande ramverket som också använde x:Shared
värden.
I WPF är standardvillkoret x:Shared
för resurser true
. Det här villkoret innebär att en viss resursbegäran alltid returnerar samma instans.
Om du ändrar ett objekt som returneras via ett resurs-API, till exempel FindResourceeller ändrar ett objekt direkt inom en ResourceDictionary, ändras den ursprungliga resursen. Om referenser till den resursen var dynamiska resursreferenser får användarna av den resursen den ändrade resursen.
Om referenser till resursen var statiska resursreferenser är ändringar i resursen efter XAML-bearbetningstiden irrelevanta. Mer information om referenserna för statiska och dynamiska resurser finns i Översikt över XAML-resurser (WPF .NET).
Att uttryckligen ange x:Shared="true"
görs sällan, eftersom det redan är standardinställningen. Det finns ingen motsvarande direktkod för x:Shared
i WPF-objektmodellen. Det kan bara anges i en XAML-användning och måste bearbetas antingen av WPF-standardbeteendet eller i en mellanliggande XAML-nodström på belastningssökvägen om den bearbetas med .NET XAML Services och dess XAML-läsare.
Ett scenario för x:Shared="false"
är om du definierar en FrameworkElement- eller FrameworkContentElement härledd klass som en resurs och sedan introducerar elementresursen i en innehållsmodell.
x:Shared="false"
gör att en elementresurs kan introduceras flera gånger i samma samling (till exempel en UIElementCollection). Utan x:Shared="false"
är detta ogiltigt eftersom samlingen framtvingar att innehållet är unikt. Men det x:Shared="false"
beteendet skapar en annan identisk instans av resursen i stället för att returnera samma instans.
Ett annat scenario för x:Shared="false"
är om du använder en Freezable resurs för animeringsvärden men vill ändra resursen per animering.
Stränghanteringen av false
är inte skiftlägeskänslig.
I WPF är x:Shared
endast giltigt under följande villkor:
Den ResourceDictionary som innehåller objekten med
x:Shared
måste kompileras. ResourceDictionary kan inte vara inom lös XAML eller användas för teman.Den ResourceDictionary som innehåller objekten får inte kapslas inom en annan ResourceDictionary. Du kan till exempel inte använda
x:Shared
för objekt i en ResourceDictionary som finns inom en Style som redan är ett ResourceDictionary objekt.
Se även
.NET Desktop feedback