방법: 리소스 정의 및 참조
이 예제에서는 Extensible Application Markup Language (XAML)의 특성을 사용하여 리소스를 정의하고 참조하는 방법을 보여 줍니다.
예제
다음 예제에서는 두 가지 리소스 형식 즉, 한 개의 SolidColorBrush 리소스와 여러 개의 Style 리소스를 정의합니다. SolidColorBrush 리소스 MyBrush는 각 Brush 형식 값을 사용하는 여러 속성의 값을 제공하는 데 사용됩니다. Style 리소스 PageBackground, TitleText 및 Label은 특정 컨트롤 형식을 대상으로 합니다. 해당 스타일 리소스가 리소스 키에 의해 참조되고 XAML에 정의된 여러 특정 컨트롤 요소의 Style 속성을 설정하는 데 사용되는 경우 스타일은 대상 컨트롤에서 다양한 속성을 설정합니다.
또한 Label 스타일의 setter 내 속성 중 하나는 앞에서 정의한 MyBrush 리소스를 참조합니다. 이는 일반적인 기법에 해당되지만, 리소스는 제공된 순서로 구분 분석되어 리소스 사전에 입력됨을 알아야 합니다. 또한 StaticResource 태그 확장을 사용하여 다른 리소스 내에서 리소스를 참조하는 경우 사전 내에서 발견되는 순서로 리소스가 요청됩니다. 참조하는 리소스가 리소스 컬렉션 내에서 리소스가 요청되는 위치보다 앞쪽에 정의되어 있는지 확인해야 합니다. 필요에 따라 DynamicResource 태그 확장을 사용하여 엄격한 리소스 참조의 생성 순서를 적용하여 대신 런타임에 리소스를 참조하게 만들 수 있지만 이 DynamicResource 기법은 성능과 관련되어 있습니다. 자세한 내용은 리소스 개요를 참조하십시오.
<Page Name="root"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<SolidColorBrush x:Key="MyBrush" Color="Gold"/>
<Style TargetType="Border" x:Key="PageBackground">
<Setter Property="Background" Value="Blue"/>
</Style>
<Style TargetType="TextBlock" x:Key="TitleText">
<Setter Property="Background" Value="Blue"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="FontSize" Value="18"/>
<Setter Property="Foreground" Value="#4E87D4"/>
<Setter Property="FontFamily" Value="Trebuchet MS"/>
<Setter Property="Margin" Value="0,40,10,10"/>
</Style>
<Style TargetType="TextBlock" x:Key="Label">
<Setter Property="DockPanel.Dock" Value="Right"/>
<Setter Property="FontSize" Value="8"/>
<Setter Property="Foreground" Value="{StaticResource MyBrush}"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Margin" Value="0,3,10,0"/>
</Style>
</Page.Resources>
<StackPanel>
<Border Style="{StaticResource PageBackground}">
<DockPanel>
<TextBlock Style="{StaticResource TitleText}">Title</TextBlock>
<TextBlock Style="{StaticResource Label}">Label</TextBlock>
<TextBlock DockPanel.Dock="Top" HorizontalAlignment="Left" FontSize="36" Foreground="{StaticResource MyBrush}" Text="Text" Margin="20" />
<Button DockPanel.Dock="Top" HorizontalAlignment="Left" Height="30" Background="{StaticResource MyBrush}" Margin="40">Button</Button>
<Ellipse DockPanel.Dock="Top" HorizontalAlignment="Left" Width="100" Height="100" Fill="{StaticResource MyBrush}" Margin="40" />
</DockPanel>
</Border>
</StackPanel>
</Page>