x:Shared 属性
更新 : 2007 年 11 月
false に設定されると、Windows Presentation Foundation (WPF) リソース取得動作を変更して、すべての要求で同じインスタンスを共有するのではなく、リソースに対して要求があるたびに新しいインスタンスが作成されるようにします。
XAML 属性の使用方法
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
解説
リソースに対する x:Shared の既定の状態は true です。この状態は、指定したすべてのリソース要求が常に同じインスタンスを返すことを意味します。FindResource などのリソース API を通して返されるオブジェクトを変更するか、または ResourceDictionary 内で直接オブジェクトを変更すると、元のリソースが変更されます。そのリソースへの参照が動的リソース参照であった場合、そのリソースのコンシューマは変更されたリソースを取得するようになります (リソースへの参照が静的リソース参照であった場合は、XAML 処理後にリソースを変更しても無意味です。静的リソース参照と動的リソース参照の詳細な比較については、「リソースの概要」を参照してください)。
x:Shared="true" は既定の設定であるため、これを指定することはあまりありません。x:Shared に同等の直接的なコードはありません。
x:Shared="false" を指定するシナリオの 1 つに、FrameworkElement または FrameworkContentElement 派生クラスをリソースとして定義し、その要素リソースをコンテンツ モデルに導入する場合があります。x:Shared="false" を指定することで、要素リソースを同じコレクション (UIElementCollection など) に複数回導入できます。x:Shared="false" を指定しない場合は、コレクションの内容が一意であることが強制されるため、この操作が無効になります。ただし、x:Shared="false" の動作は、基本的には同じインスタンスを返すのではなく、リソースの同一インスタンスを新たに作成します。
x:Shared="false" を指定するもう 1 つのシナリオは、アニメーションの値用に Freezable リソースを使用し、そのリソースをアニメーションごとに変更する場合です。
"false" 文字列の処理では、大文字と小文字が区別されません。
x:Shared は、次の条件下でのみ有効となります。
x:Shared が指定された項目を含んでいる ResourceDictionary をコンパイルする必要があります。ResourceDictionary を Loose XAML 内に含めたり、テーマに使用したりすることはできません。
項目を含んでいる ResourceDictionary を、別の ResourceDictionary 内に入れ子にすることはできません。たとえば、既に ResourceDictionary の項目となっている Style 内にある ResourceDictionary 内の項目には、x:Shared を使用できません。