{StaticResource} 태그 확장
이미 정의된 리소스에 대한 참조를 평가하여 모든 XAML 특성에 대한 값을 제공합니다. 리소스는 ResourceDictionary에 정의되며 StaticResource 사용은 ResourceDictionary에서 해당 리소스의 키를 참조합니다.
XAML 특성 사용
<object property="{StaticResource key}" .../>
XAML 값
용어 | 설명 |
---|---|
key | 요청한 리소스의 키입니다. 이 키는 처음에 ResourceDictionary에 의해 할당됩니다. 리소스 키는 XamlName 문법에 정의된 문자열일 수 있습니다. |
설명
StaticResource 는 XAML 리소스 사전의 다른 위치에 정의된 XAML 특성에 대한 값을 가져오는 기술입니다. 값은 여러 속성 값에서 공유되거나 XAML 리소스 사전이 XAML 패키징 또는 팩토링 기술로 사용되기 때문에 리소스 사전에 배치될 수 있습니다. XAML 패키징 기술의 예로는 컨트롤의 테마 사전이 있습니다. 또 다른 예는 리소스 대체에 사용되는 병합된 리소스 사전입니다.
StaticResource 는 요청된 리소스의 키를 지정하는 하나의 인수를 사용합니다. 리소스 키는 항상 Windows 런타임 XAML의 문자열입니다. 리소스 키를 처음 지정하는 방법에 대한 자세한 내용은 x:Key 특성을 참조 하세요.
StaticResource가 리소스 사전의 항목으로 확인하는 규칙은 이 항목에 설명되어 있지 않습니다. 이는 참조와 리소스가 템플릿에 모두 존재하는지 여부, 병합된 리소스 사전이 사용되는지 여부에 따라 달라집니다. 리소스를 정의하고 샘플 코드를 포함하여 ResourceDictionary를 올바르게 사용하는 방법에 대한 자세한 내용은 ResourceDictionary 및 XAML 리소스 참조를 참조하세요.
중요 StaticResource는 XAML 파일 내에서 구문적으로 더 정의된 리소스에 대한 전방 참조를 만들려고 해서는 안 됩니다. 이렇게 하려는 시도는 지원되지 않습니다. 전방 참조가 실패하지 않더라도 이를 수행하려고 하면 성능이 저하됩니다. 최상의 결과를 얻으려면 전방 참조를 피할 수 있도록 리소스 사전의 컴퍼지션을 조정합니다.
해결할 수 없는 키에 StaticResource를 지정하려고 하면 런타임에 XAML 구문 분석 예외가 throw됩니다. 디자인 도구는 경고 또는 오류를 제공할 수도 있습니다.
Windows 런타임 XAML 프로세서 구현에는 StaticResource 기능에 대한 지원 클래스 표현이 없습니다. StaticResource 는 XAML에서만 사용할 수 있습니다. 코드에서 가장 가까운 값은 Contains 또는 TryGetValue 호출과 같이 ResourceDictionary의 컬렉션 API를 사용하는 것입니다.
{ThemeResource} 태그 확장 은 다른 위치에서 명명된 리소스를 참조하는 유사한 태그 확장입니다. 차이점은 {ThemeResource} 태그 확장은 활성 상태인 시스템 테마에 따라 다른 리소스를 반환할 수 있다는 점입니다. 자세한 내용은 TemplateBinding 태그 확장을 참조하세요.
StaticResource는 태그 확장입니다. 태그 확장은 특성 값을 리터럴 값 또는 처리기 이름이 아닌 다른 값이 되도록 이스케이프해야 하는 요구 사항이 있는 경우 일반적으로 구현되며 이러한 요구 사항은 특정 형식 또는 속성에 형식 변환기를 배치하는 것보다 더 포괄적입니다. XAML의 모든 태그 확장은 특성 구문에 "{" 및 "}" 문자를 사용하며, 여기서 특성 구문은 XAML 프로세서가 태그 확장이 특성을 처리해야 함을 인식하는 데 사용하는 규칙입니다.
{StaticResource} 사용 예제
이 예제 XAML은 XAML 데이터 바인딩 샘플에서 가져옵니다.
<StackPanel Margin="5">
<!-- Add converter as a resource to reference it from a Binding. -->
<StackPanel.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</StackPanel.Resources>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Percent grade:" Margin="5" />
<Slider x:Name="sliderValueConverter" Minimum="1" Maximum="100" Value="70" Margin="5"/>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Letter grade:" Margin="5"/>
<TextBox x:Name="tbValueConverterDataBound"
Text="{Binding ElementName=sliderValueConverter, Path=Value, Mode=OneWay,
Converter={StaticResource GradeConverter}}" Margin="5" Width="150"/>
</StackPanel>
이 특정 예제에서는 사용자 지정 클래스에서 지원되는 개체를 만들고 ResourceDictionary에서 리소스로 만듭니다. 유효한 리소스가 되려면 이 local:S2Formatter
요소에도 x:Key 특성 값이 있어야 합니다. 특성 값은 "GradeConverter"로 설정됩니다.
그러면 리소스가 XAML로 조금 더 요청됩니다. 여기서 볼 수 있습니다 {StaticResource GradeConverter}
.
{StaticResource} 태그 확장 사용이 다른 태그 확장 {Binding} 태그 확장의 속성을 설정하는 방법을 확인합니다. 여기서는 두 가지 중첩된 태그 확장 사용이 있습니다. 먼저 리소스를 가져오고 값으로 사용할 수 있도록 내부 리소스가 먼저 평가됩니다. 이 같은 예제는 {Binding} 태그 확장에도 표시됩니다.
{StaticResource} 태그 확장에 대한 디자인 타임 도구 지원
XAML 페이지에서 {StaticResource} 태그 확장을 사용하는 경우 Microsoft Visual Studio 2013은 Microsoft IntelliSense 드롭다운에 가능한 키 값을 포함할 수 있습니다. 예를 들어 "{StaticResource"를 입력하는 즉시 현재 조회 범위의 모든 리소스 키가 IntelliSense 드롭다운에 표시됩니다. 페이지 수준(FrameworkElement.Resources) 및 앱 수준(Application.Resources)에 있는 일반적인 리소스 외에도 XAML 테마 리소스와 프로젝트에서 사용 중인 확장의 리소스도 표시됩니다.
{StaticResource} 사용의 일부로 리소스 키가 있으면 F12(정의로 이동) 기능을 사용하여 해당 리소스를 확인하고 정의된 사전을 표시할 수 있습니다. 테마 리소스의 경우 디자인 타임에 generic.xaml로 이동합니다.