다음을 통해 공유


방법: 리소스 정의 및 참조

이 예제는 XAML(Extensible Application Markup Language)에서 특성을 사용하여 리소스를 정의하고 참조하는 방법을 보여 줍니다.

예제

다음 예제는 두 가지 유형의 리소스(SolidColorBrush 리소스와 여러 Style)를 정의합니다. SolidColorBrush 리소스 MyBrush는 각각 Brush 형식 값을 사용하는 여러 속성의 값을 제공하는 데 사용됩니다. Style 리소스인 PageBackground, TitleText, Label은 각각 특정 컨트롤 형식을 대상으로 지정합니다. 스타일은 대상 컨트롤에서 다양한 속성을 설정하며, 이때 해당 스타일 리소스는 리소스 키에 의해 참조되고, XAML에서 정의된 다양한 특정 컨트롤 요소의 Style 속성을 설정하는 데 사용됩니다.

Label 스타일의 setter 내 속성 중 하나는 앞에서 정의한 MyBrush 리소스도 참조합니다. 이것은 일반적인 기법이지만 리소스가 구문 분석되어 지정된 순서대로 리소스 사전에 입력된다는 점을 기억해야 합니다. 또한 StaticResource 태그 확장을 사용하여 다른 리소스 내에서 리소스를 참조하는 경우 리소스는 사전 내에서 찾은 순서로 요청됩니다. 참조하는 리소스는 해당 리소스가 요청되는 위치보다 앞서 리소스 컬렉션 내에서 정의되어야 합니다. 필요한 경우 DynamicResource 태그 확장을 사용하여 런타임에 리소스를 참조하면 리소스 참조의 엄격한 순서를 해결할 수 있지만 이 DynamicResource 기법은 성능에 영향이 있다는 점을 알아야 합니다. 자세한 내용은 XAML 리소스를 참조하세요.

<Page Name="root"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://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>

참고 항목