{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로 이동합니다.