Style 클래스
TOC
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장

스타일 Class

형식의 인스턴스 간에 공유할 수 있는 속성 setter를 포함합니다. Style은 일반적으로 리소스 컬렉션에 선언되어 공유할 수 있고 컨트롤 템플릿 및 다른 스타일을 적용하는 데 사용할 수 있습니다.

상속

Object
  DependencyObject
    Style

구문


public sealed class Style : DependencyObject


<Style .../>
-or-
<Style ...>
  oneOrMoreSetters
</Style>

XAML Values

oneOrMoreSetters

하나 이상의 Setter 개체 요소입니다.

특성

[ContentProperty("Name=Setters")]
[MarshalingBehavior(Agile)]
[Threading(Both)]
[Version(0x06020000)]
[WebHostHidden()]

멤버

Style클래스에는 다음과 같은 형식의 멤버가 있습니다.

생성자

Style클래스에는 다음과 같은 생성자가 있습니다.

생성자Description
Style() Initializes a new instance of the Style class, with no initial TargetType and an empty Setters collection.
Style(TypeName) Initializes a new instance of the Style class, with a specified initial TargetType and an empty Setters collection.

 

메서드

The Style 클래스 - 이러한 메서드가 있습니다. 다음 위치의 메서드도 상속합니다. Object 클래스.

메서드Description
ClearValue Clears the local value of a dependency property. (다음에서 상속됨 DependencyObject)
GetAnimationBaseValue Returns any base value established for a dependency property, which would apply in cases where an animation is not active. (다음에서 상속됨 DependencyObject)
GetValue Returns the current effective value of a dependency property from a DependencyObject. (다음에서 상속됨 DependencyObject)
ReadLocalValue Returns the local value of a dependency property, if a local value is set. (다음에서 상속됨 DependencyObject)
Seal Locks the style so that the TargetType property or any Setter in the Setters collection cannot be changed.
SetValue Sets the local value of a dependency property on a DependencyObject. (다음에서 상속됨 DependencyObject)

 

속성

Style클래스 - 이러한 속성이 있습니다.

속성사용 권한Description

BasedOn

읽기/쓰기Gets or sets a defined style that is the basis of the current style.

Dispatcher

읽기 전용Gets the CoreDispatcher that this object is associated with. (다음에서 상속됨 DependencyObject)

IsSealed

읽기 전용Gets a value that indicates whether the style is read-only and cannot be changed.

Setters

읽기 전용Gets a collection of Setter objects.

TargetType

읽기/쓰기Gets or sets the type for which the style is intended. TargetType can be used to declare an implicit style resource if there's no resource key specified.

 

설명

Style은 기본적으로 해당 속성이 있는 특정 형식의 하나 이상의 인스턴스에 적용된 속성 설정 컬렉션입니다. Style은 하나 이상의 Setter 개체로 구성된 컬렉션을 포함합니다. 각 Setter에는 PropertyValue가 있습니다. Property는 스타일이 적용되는 요소의 속성 이름입니다. Value는 속성에 적용되는 값입니다.

Style을 적용하려면 대상 개체가 DependencyObject여야 합니다. 각 SetterProperty 값으로 참조하는 속성은 종속성 속성이어야 합니다.

Style을 만들 때는 TargetType 속성을 설정해야 합니다. 그렇지 않으면 예외가 throw됩니다.

같은 속성의 값을 Style에 설정하고 요소에도 직접 설정하면 요소에 직접 설정한 값이 우선 적용됩니다. 자세한 내용은 종속성 속성 개요, 특히 "종속성 속성 값 우선 순위" 섹션을 참조하십시오.

XAML 리소스로 Style 정의

Style은 거의 항상 ResourceDictionary의 리소스로 XAML에 정의됩니다.

  • 동일 XAML 페이지에서 정의된 다른 UI 항목에서만 사용되는 Style의 경우 일반적으로 FrameworkElement.Resources 컬렉션(루트 요소가 Page인 경우 Page.Resources)에 Style을 정의합니다.
  • 앱에서 두 페이지 이상에 사용되는 Style의 경우 일반적으로 Application.Resources 컬렉션에 Style을 정의합니다. 또는 Application.ResourcesMergedDictionaries 값으로 포함하는 앱에 대한 별도의 XAML 파일이 있을 있습니다.
  • 대부분의 UI 요소에는 Windows 런타임에 정의된 기본 스타일이 있습니다. 앱의 리소스 파일이 아니지만 리소스 파일과 유사한 구조를 지닌 generic.xaml 디자인 도우미 XAML 파일에서 기본 스타일의 복사본을 확인할 수 있습니다. 도구에서 사용하도록 설정된 스타일의 복사본을 편집할 때 이 파일의 개별 부분을 앱의 XAML에 시작 지점으로 복사할 수 있지만, 이러한 복사본을 만든 후 Resources 컬렉션 중 하나에 포함하거나 MergedDictionaries를 통해 간접적으로 액세스해야 합니다. 이러한 모든 경우에 기본값을 재정의하는 수정된 XAML이 앱의 일부로 포함됩니다.

Windows 8:  Windows 8 XAML에서 기존 컨트롤의 템플릿을 다시 지정하는 경우 대부분의 시작 앱 템플릿에 포함된 StandardStyles.xaml XAML 파일에 있는 Style 요소를 수정하기도 합니다. StandardStyles.xaml은 템플릿 app.xaml 파일에서 MergedDictionaries 소스 파일로 참조됩니다. Windows 8.1부터 앱 템플릿은 StandardStyles.xaml을 더 이상 사용하지 않습니다.

ResourceDictionaryStyle 정의된 요소는 일반적으로 XAML 리소스가 되기 위한 요구 사항인 x:Key 특성 또는 x:Name 특성을 가질 필요가 없습니다. 이러한 방식으로 정의된 Style은 해당 TargetType 속성 값을 암시적 키로 사용하며 이를 암시적 스타일이라고 합니다.

XAML 리소스 사전의 사용 방법에 대한 자세한 내용은 ResourceDictionary 및 XAML 리소스 참조를 참조하십시오.

스타일 및 템플릿

StyleSetter를 사용하여 종속성 속성에 값을 적용할 수 있습니다. 그러나 이는 일반적인 Style에서 대부분의 XAML 태그를 구성하는 Control 파생 클래스의 Template 속성에 대한 Setter입니다. Property="Template"가 있는 SetterValue는 대체로 ControlTemplate 개체 요소를 포함하는 속성 요소로 지정됩니다.

Style을 사용하여 컨트롤 템플릿을 정의하는 경우 해당 Control.Template setter에 대한 ControlTemplate 요소의 TargetTypeStyle 요소의 TargetType은 항상 동일한 값을 사용해야 합니다.

Template setter는 해당 템플릿이 적용되는 컨트롤 인스턴스에 대한 기본 템플릿 UI 정의를 정의합니다. 또한 컨트롤에 대한 시각적 상태 및 기본 테마 전환 등의 다른 상태 기반 UI 정의가 포함됩니다. ListBox와 같은 복잡한 컨트롤의 경우 StyleControlTemplate의 기본 템플릿 내에 수백 줄의 XAML이 포함될 수 있습니다. 컨트롤 템플릿 설정 시나리오에서 Style의 역할에 대한 자세한 내용은 빠른 시작: 컨트롤 템플릿을 참조하십시오.

컨트롤의 템플릿에는 논리 상태에 따라 컨트롤의 모양을 변경하는 시각적 상태가 포함된 경우가 많습니다. 예를 들어 해당 템플릿에서 새 시각적 상태를 적용하여 누를 때 하나의 Button이 다른 모양을 가질 수 있으며, 코드가 아닌 XAML에서 모든 모양 변경이 이루어집니다. 시각적 상태의 작동 방법 및 사용자 지정 컨트롤의 상태를 정의하고 수정하는 방법에 대한 자세한 내용은 시각적 상태에 대한 스토리보드 애니메이션빠른 시작: 컨트롤 템플릿을 참조하십시오.

스타일 및 런타임 동작

런타임에 Style을 통해 설정된 개별 속성의 값을 변경할 수 있으며, 새 값이 Setters 값을 덮어씁니다. 예를 들어 이 속성이 스타일을 통해 설정된 경우에도 런타임에 Template 속성을 설정할 수 있습니다.

런타임에 Style의 속성을 조정할 수 있지만 스타일이 어떤 항목에도 적용되지 않았으며 암시적으로 사용되지 않는 리소스로 존재하는 경우에만 조정이 가능합니다. 예를 들어 x:Key 특성은 있지만 XAML 내에 해당 스타일을 참조하는 StaticResource 값이 없는 Resources의 스타일에 대해 Setters의 컬렉션에 setter를 추가할 수 있습니다. 그러나 Style이 참조되어 로드된 개체에 의해 사용되는 즉시 Style은 봉인된 것으로 간주해야 합니다. Style에 대한 IsSealed 속성 값을 확인하여 봉인된 상태를 검색할 수 있습니다. true인 경우 스타일이 봉인되고 스타일의 속성이나 그 내부의 Setter 하위 값을 수정할 수 없습니다. 스타일이 사용되고 봉인되는 시점은 Style이 참조되는 개체가 해당 Loaded 이벤트를 발생시킬 때도 감지될 수 있습니다.

BasedOn 스타일

앱에서 정의된 기존 스타일을 기준으로 또는 Windows 런타임 컨트롤의 기본 스타일을 통해 새 스타일을 작성할 수 있습니다. BasedOn 속성을 사용하여 이 작업을 수행할 수 있습니다. 이렇게 하면 XAML에서 중복이 줄어들고 리소스를 관리하기 쉬워집니다. 각 스타일은 BasedOn 스타일을 하나만 지원합니다. 자세한 내용은 BasedOn 또는 빠른 시작: 컨트롤 스타일 지정을 참조하십시오.

암시적 스타일

이러한 개체의 각 인스턴스가 구체적으로 StyleFrameworkElement.Style 값으로 참조할 필요 없이 동일한 TargetType의 모든 개체에서 Style이 암시적으로 사용되도록 스타일을 정의할 수 있습니다. <Style> 리소스가 x:Key 특성 값 없이 ResourceDictionary에 선언되면 x:Key 값은 TargetType 속성 값을 사용됩니다. 암시적으로 스타일을 설정하는 경우 스타일은 TargetType에 정확하게 일치하는 형식에만 적용되고 TargetType 값에서 파생된 요소에는 적용되지 않습니다. 예를 들어, 응용 프로그램에서 모든 ToggleButton 컨트롤에 대한 스타일을 암시적으로 만들고 응용 프로그램에 ToggleButtonCheckBox 컨트롤이 있는 경우(CheckBoxToggleButton에서 파생) "ToggleButton" 암시적 스타일은 ToggleButton 컨트롤에만 적용됩니다.

XAML 구문 참고 사항

SettersStyle에 대한 XAML 콘텐츠 속성이므로 <Style><Setter .../><Setter .../></Style>과 같은 암시적 컬렉션 구문을 사용할 수 있습니다.

코드에서 Style 클래스를 사용하는 경우(예: 생성자 호출 및 하나씩 Setter 값 작성)는 매우 드뭅니다. 스타일은 템플릿에 사용되고 템플릿은 XAML 로드 시 사용할 수 있어야 하므로 코드에서 만들어지는 Style은 대개 UI에서 컨트롤에 적용되기에는 너무 늦게 제공됩니다.

예제

이 예제에서는 두 가지 스타일을 만듭니다. 하나는 TextBlock용이고, 다른 하나는 TextBox용입니다. 각 스타일은 각각의 TextBlockTextBox에 대해 동일한 모양을 만들도록 컨트롤의 두 인스턴스에 적용됩니다. 이 예제에서는 StyleStaticResource로 참조하여 각 컨트롤의 FrameworkElement.Style 속성을 설정합니다.

TextBox의 스타일에서 Margin 속성은 4로 설정됩니다. 이는 TextBox의 모든 면에서 여백이 4라는 뜻입니다. Last NameFirst Name보다 길이가 짧기 때문에 첫 번째 TextBlock보다 짧은 두 번째 TextBlock의 길이를 조정하기 위해서 두 번째 TextBoxMargin 속성에 "6,4,4,4"의 값이 할당됩니다. 이렇게 하면 두 번째 TextBox가 스타일에서 지정된 것과 다른 여백을 갖게 되어 첫 번째 TextBox와 가로 방향으로 정렬됩니다.


<StackPanel>
  <StackPanel.Resources>
    <!--Create a Style for a TextBlock to specify that the
              Foreground equals Navy, FontSize equals 14, and
              VerticalAlignment equals Botton.-->
    <Style TargetType="TextBlock" x:Key="TextBlockStyle">
      <Setter Property="Foreground" Value="Navy"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="VerticalAlignment" Value="Bottom"/>
    </Style>

    <!--Create a Style for a TextBlock that specifies that
              the Width is 200, Height is 20, Margin is 4,
              Background is LightBlue, and FontSize is 14.-->
    <Style TargetType="TextBox" x:Key="TextBoxStyle">
      <Setter Property="Width" Value="200"/>
      <Setter Property="Height" Value="30"/>
      <Setter Property="Margin" Value="4"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="Background">
        <Setter.Value>
          <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
            <GradientStop Color="White" Offset="0.0"/>
            <GradientStop Color="LightBlue" Offset="0.5"/>
            <GradientStop Color="Navy" Offset="1"/>
          </LinearGradientBrush>
        </Setter.Value>
      </Setter>
    </Style>
  </StackPanel.Resources>

  <!--Apply the TextBlockStyle and TextBoxStyle to each 
          TextBlock and TextBox, respectively.-->
  <StackPanel Orientation="Horizontal">
    <TextBlock Style="{StaticResource TextBlockStyle}">
              First Name:
          </TextBlock>
    <TextBox Style="{StaticResource TextBoxStyle}"/>
  </StackPanel>
  <StackPanel Orientation="Horizontal">
    <TextBlock Style="{StaticResource TextBlockStyle}">
              Last Name:
          </TextBlock>
    <TextBox Style="{StaticResource TextBoxStyle}"  
                   Margin="6,4,4,4"/>
  </StackPanel>
</StackPanel>


이 예제에서는 두 가지 스타일의 요소를 만듭니다. 첫 번째 스타일 요소에 대한 TargetTypeTextBox로 설정되고 두 번째 스타일 요소에 대한 TargetTypeButton으로 설정됩니다. 이러한 항목은 TextBox 컨트롤 및 Button 컨트롤에 대한 암시적 스타일로 적용됩니다.


<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBox">
            <Setter Property="Foreground" Value="Pink" />
            <Setter Property="FontSize" Value="15" />                
        </Style>
        
        <Style TargetType="Button">
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="Background" Value="Yellow" />
        </Style>
    </StackPanel.Resources>
    
    <TextBox Height="30" Width="120" Margin="2" Text="TextBoxStyle" />
    <Button Height="30" Width="100" Margin="2" Content="ButtonStyle" />
</StackPanel>


이 예제에서는 BaseStyle이라는 Style을 기반으로 하는 InheritedStyle이라는 Style을 만듭니다. InheritedStyleYellowBackground 값을 BaseStyle에서 상속하고 BlueForeground 값을 추가합니다.


<StackPanel>
    <StackPanel.Resources>
        <Style x:Key="BaseStyle" TargetType="Button">
            <Setter Property="Background" Value="Yellow" />
        </Style>
        <!--Create a Style based on BaseStyle-->
        <Style x:Key="InheritedStyle" TargetType="Button" BasedOn="{StaticResource BaseStyle}">
            <Setter Property="Foreground" Value="Red" />
        </Style>
    </StackPanel.Resources>
    <!--A button with default style-->
    <Button Content="HelloWorld" />
    <!--A button with base style-->
    <Button Content="HelloWorld" Style="{StaticResource BaseStyle}" />
    <!--A button with a style that is inherited from the BaseStyle-->
    <Button Content="HelloWorld" Style="{StaticResource InheritedStyle}" />
</StackPanel>


요구 사항

지원되는 최소 클라이언트

Windows 8 [Windows 스토어 앱만]

지원되는 최소 서버

Windows Server 2012 [Windows 스토어 앱만]

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadata

Windows.winmd

참고 항목

DependencyObject
ControlTemplate
Setter
종속성 속성 개요
ResourceDictionary 및 XAML 리소스 참조
빠른 시작: 컨트롤 스타일 지정
빠른 시작: 컨트롤 템플릿

 

 

표시:
© 2016 Microsoft