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 내에 존재하는 개체에 적용될 때만 특성으로 유용합니다. 다른 사용법은 구문 분석 예외 또는 기타 오류를 throw하지 않지만 아무런 효과가 없습니다.
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 판독기를 사용하여 처리되는 경우 부하 경로의 중간 XAML 노드 스트림 또는 기본 WPF 동작으로 처리해야 합니다.
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 내에 중첩되지 않아야 합니다. 예를 들어, 이미 ResourceDictionary 항목인 Style 내에 있는 ResourceDictionary의 항목에 대해
x:Shared
를 사용할 수 없습니다.
참고 항목
.NET Desktop feedback