x:Shared 屬性
當設定為 false
時,修改 WPF 資源擷取行為,讓屬性化資源的要求為每個要求建立新的實例,而不是為所有要求共用相同的實例。
XAML 屬性使用方式
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
言論
x:Shared
會對應至 XAML 語言 XAML 命名空間,並由 .NET XAML 服務及其 XAML 讀取器辨識為有效的 XAML 語言專案。 不過,x:Shared
的已陳述功能僅適用於 WPF 應用程式和 WPF XAML 剖析器。 在 WPF 中,x:Shared
只有在套用至 WPF ResourceDictionary中存在的物件時,才會將其當做屬性使用。 其他使用方式不會擲回剖析例外狀況或其他錯誤,但它們沒有作用。
XAML 語言規格中未指定 x:Shared
的意義。 其他 XAML 實作,例如建置在 .NET XAML 服務上的 XAML 實作,不一定提供資源分享支援。 這類 XAML 實作可以在支援架構中提供類似的行為,這些架構也使用了 x:Shared
值。
在 WPF 中,資源的預設 x:Shared
條件是 true
。 此條件表示任何指定的資源要求一律會傳回相同的實例。
修改透過資源 API 傳回的物件,例如 FindResource,或修改直接在 ResourceDictionary內的物件,會變更原始資源。 如果該資源的參考是動態資源參考,該資源的取用者會取得變更的資源。
如果資源的參考是靜態資源參考,則 XAML 處理時間之後對資源的變更無關。 如需靜態與動態資源參考的詳細資訊,請參閱 XAML 資源概觀 (WPF .NET)。
明確指定 x:Shared="true"
很少完成,因為這是預設值。 WPF 物件模型中的 x:Shared
沒有直接程式代碼對等專案;它只能在 XAML 使用方式中指定,而且必須使用預設 WPF 行為或在載入路徑上的中繼 XAML 節點資料流中處理,如果使用 .NET XAML 服務及其 XAML 讀取器處理。
x:Shared="false"
的案例是,如果您將 FrameworkElement 或 FrameworkContentElement 衍生類別定義為資源,然後將專案資源引入內容模型。
x:Shared="false"
可讓元素資源在相同的集合中多次導入 (例如 UIElementCollection)。 若沒有 x:Shared="false"
,此作業無效,因為集合會強制執行其內容的唯一性。 不過,x:Shared="false"
行為會建立另一個相同的資源實例,而不是傳回相同的實例。
另一個 x:Shared="false"
案例是,如果您使用動畫值的 Freezable 資源,但想要根據每個動畫修改資源。
false
的字串處理不區分大小寫。
在 WPF 中,x:Shared
只有在下列情況下才有效:
必須編譯包含具有
x:Shared
之專案的 ResourceDictionary。 ResourceDictionary 不能位於鬆散的 XAML 內,也無法用於主題。包含專案的 ResourceDictionary 不得巢狀於另一個 ResourceDictionary內。 例如,您無法將
x:Shared
用於 ResourceDictionary 中已經是 ResourceDictionary 項目的 Style 內的專案。