次の方法で共有


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 は次の条件でのみ有効です。

関連項目