x:Shared 屬性
更新:2007 年 11 月
設定為 false 時會修改 Windows Presentation Foundation (WPF) 資源擷取行為,這樣資源要求就會針對每個要求建立新的執行個體,而不是讓所有要求共用相同的執行個體。
XAML 屬性使用方式
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
備註
資源的預設 x:Shared 條件是 true。這個條件代表任何指定的資源要求一定會傳回相同執行個體。修改透過資源 API 傳回的物件 (例如 FindResource),或是直接修改 ResourceDictionary 內的物件,都會變更原始資源。如果該資源的參考是動態資源參考,該資源的消費者將取得變更的資源 (如果該資源的參考是靜態資源參考,XAML 處理時間過後的資源變更就無關緊要。如需靜態對動態資源參考的詳細資訊,請參閱資源概觀)。
指定 x:Shared="true" 是並不常見的情況,因為這本來已經是預設值。x:Shared 並沒有直接的程式碼對等用法。
一個使用 x:Shared="false" 的案例是當您定義 FrameworkElement 或 FrameworkContentElement 衍生類別做為資源,並將項目資源引入內容模型時。x:Shared="false" 可以讓項目資源多次引入到同一個集合 (例如 UIElementCollection) 中。就算沒有 x:Shared="false",這還是合法的,因為集合會強制內容的唯一性。但是,x:Shared="false" 行為基本上會建立另一個相同的資源執行個體,而不會傳回同一個執行個體。
另一個使用 x:Shared="false" 的案例是當您使用動畫值的 Freezable 資源,但卻想要針對每個動畫修改資源。
"false" 的字串處理不會區分大小寫。
只有在下列條件下,x:Shared 才是合法的:
包含具有 x:Shared 的項目的 ResourceDictionary 必須經過編譯。ResourceDictionary 不能位於鬆散 XAML 內,或是用於主題。
包含項目的 ResourceDictionary 不能位於另一個 ResourceDictionary 的巢狀結構內。例如,在已經是 ResourceDictionary 項目的 Style 內的 ResourceDictionary 中,您不能為項目使用 x:Shared。