x:Shared Attribute
Při nastavení na false
upraví chování při načítání prostředků WPF tak, aby požadavky na přiřazený prostředek vytvořily novou instanci pro každý požadavek místo sdílení stejné instance pro všechny požadavky.
Použití atributu XAML
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
Poznámky
x:Shared
je mapován na obor názvů XAML jazyka XAML a rozpozná se jako platný prvek jazyka XAML službami .NET XAML a jejími čtenáři XAML. Uvedené funkce x:Shared
jsou však relevantní pouze pro aplikace WPF a pro analyzátor XAML WPF. Ve WPF je x:Shared
užitečný pouze jako atribut, pokud je použit na objekt, který existuje v rámci WPF ResourceDictionary. Jiná použití nevyvolají výjimky analýzy ani jiné chyby, ale nemají žádný vliv.
Význam x:Shared
není zadán ve specifikaci jazyka XAML. Jiné implementace XAML, například ty, které jsou založené na službách .NET XAML, nemusí nutně poskytovat podporu sdílení prostředků. Takové implementace XAML by mohly poskytovat podobné chování v podpůrné rozhraní, které také používaly x:Shared
hodnoty.
Ve WPF je výchozí podmínka x:Shared
prostředků true
. Tato podmínka znamená, že každý daný požadavek na prostředek vždy vrátí stejnou instanci.
Úprava objektu vráceného prostřednictvím rozhraní API prostředků, jako je FindResourcenebo úprava objektu přímo v rámci ResourceDictionary, změní původní prostředek. Pokud byly odkazy na tento prostředek dynamické odkazy na prostředky, příjemci tohoto prostředku získají změněný prostředek.
Pokud byly odkazy na prostředek statické odkazy na prostředky, změny prostředku po době zpracování XAML jsou irelevantní. Další informace o statických a dynamických odkazech na prostředky naleznete v tématu Přehled prostředků XAML (WPF .NET).
Explicitní zadání x:Shared="true"
se provádí zřídka, protože to už je výchozí. V objektovém modelu WPF neexistuje žádný přímý ekvivalent kódu pro x:Shared
; Lze ji zadat pouze v použití XAML a musí být zpracována buď výchozím chováním WPF, nebo v zprostředkujícím datovém proudu uzlu XAML na cestě k načtení, pokud je zpracována pomocí služeb .NET XAML Services a jejích čteček XAML.
Scénář pro x:Shared="false"
spočívá v tom, že definujete FrameworkElement nebo FrameworkContentElement odvozenou třídu jako prostředek a pak tento prostředek představíte do modelu obsahu.
x:Shared="false"
umožňuje, aby byl prostředek prvku zaveden vícekrát ve stejné kolekci (například UIElementCollection). Bez x:Shared="false"
je to neplatné, protože kolekce vynucuje jedinečnost jejího obsahu. Chování x:Shared="false"
však místo vrácení stejné instance vytvoří další identickou instanci prostředku.
Dalším scénářem pro x:Shared="false"
je, že pro hodnoty animace použijete prostředek Freezable, ale chcete prostředek upravit na základě animace.
Zpracování řetězců false
nerozlišuje malá a velká písmena.
Ve WPF platí x:Shared
pouze za následujících podmínek:
ResourceDictionary obsahující položky s
x:Shared
musí být zkompilovány. ResourceDictionary nemůže být v rámci volného kódu XAML nebo použit pro motivy.ResourceDictionary, která obsahuje položky, nesmí být vnořena do jiného ResourceDictionary. Nemůžete například použít
x:Shared
pro položky v ResourceDictionary, který je v Style, který je již ResourceDictionary položkou.
Viz také
.NET Desktop feedback