x:Shared 属性
false
に設定すると、WPF リソース取得動作が変更され、属性付きリソースの要求では、すべての要求に対して同じインスタンスを共有する代わりに、要求ごとに新しいインスタンスが作成されます。
XAML 属性の使用法
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
備考
x:Shared
は XAML 言語 XAML 名前空間にマップされ、.NET XAML Services とその XAML リーダーによって有効な XAML 言語要素として認識されます。 ただし、x:Shared
の記載された機能は、WPF アプリケーションと WPF XAML パーサーにのみ関連します。 WPF では、x:Shared
は、WPF ResourceDictionary内に存在するオブジェクトに適用される場合にのみ、属性として役立ちます。 その他の使用法では、解析例外やその他のエラーはスローされませんが、効果はありません。
x:Shared
の意味は、XAML 言語仕様では指定されていません。 他の XAML 実装 (.NET XAML サービス上に構築されたものなど) は、必ずしもリソース共有のサポートを提供するとは限りません。 このような XAML 実装では、サポート フレームワークでも同様の動作が提供され、x:Shared
値も使用される可能性があります。
WPF では、リソースの既定の x:Shared
条件は true
です。 この条件は、指定されたリソース要求が常に同じインスタンスを返することを意味します。
FindResourceなどのリソース API を介して返されるオブジェクトを変更したり、ResourceDictionary内で直接オブジェクトを変更したりすると、元のリソースが変更されます。 そのリソースへの参照が動的リソース参照であった場合、そのリソースのコンシューマーは変更されたリソースを取得します。
リソースへの参照が静的リソース参照であった場合、XAML 処理時間後のリソースへの変更は関係ありません。 静的リソース参照と動的リソース参照の詳細については、「XAML リソースの概要 (WPF .NET)」を参照してください。
x:Shared="true"
を明示的に指定することはほとんど行われません。これは既に既定値であるためです。 WPF オブジェクト モデルの x:Shared
に相当するダイレクト コードはありません。これは XAML 使用法でのみ指定でき、.NET XAML サービスとその XAML リーダーを使用して処理される場合は、既定の WPF 動作または読み込みパス上の中間 XAML ノード ストリームで処理する必要があります。
x:Shared="false"
のシナリオは、FrameworkElement または派生クラス FrameworkContentElement リソースとして定義し、その要素リソースをコンテンツ モデルに導入することです。
x:Shared="false"
を使用すると、同じコレクション (UIElementCollectionなど) に要素リソースを複数回導入できます。
x:Shared="false"
しないと、コレクションがその内容の一意性を強制するため、これは無効です。 ただし、x:Shared="false"
動作では、同じインスタンスを返す代わりに、リソースの別の同じインスタンスが作成されます。
x:Shared="false"
のもう 1 つのシナリオは、アニメーション値に Freezable リソースを使用するが、アニメーションごとにリソースを変更する場合です。
false
の文字列処理では、大文字と小文字は区別されません。
WPF では、x:Shared
は次の条件でのみ有効です。
x:Shared
を持つ項目を含む ResourceDictionary をコンパイルする必要があります。 ResourceDictionary を緩い XAML 内に含めたり、テーマに使用したりすることはできません。項目を含む ResourceDictionary は、別の ResourceDictionary内に入れ子にすることはできません。 たとえば、既に ResourceDictionary 項目である Style 内にある ResourceDictionary 内の項目に
x:Shared
を使用することはできません。
関連項目
- ResourceDictionary
- XAML リソースの概要 (WPF .NET)
- 基本要素 を
する
.NET Desktop feedback