Style.TargetType 속성

정의

스타일이 의도된 형식을 가져오거나 설정합니다. TargetType 는 지정된 리소스 키가 없는 경우 암시적 스타일 리소스를 선언하는 데 사용할 수 있습니다.

public:
 property TypeName TargetType { TypeName get(); void set(TypeName value); };
TypeName TargetType();

void TargetType(TypeName value);
public System.Type TargetType { get; set; }
var typeName = style.targetType;
style.targetType = typeName;
Public Property TargetType As Type
<Style TargetType="typeName"/>

속성 값

스타일이 적용되는 개체의 형식입니다. 이 값은 일반적으로 코드가 아닌 XAML로 설정됩니다. 설명 부분을 참조하세요.

예제

이 예제에서는 두 가지 스타일을 만듭니다. 하나는 TextBlock 용이고 다른 하나는 TextBox용입니다. 각 스타일은 각 TextBlockTextBox에 대해 균일한 모양을 만들기 위해 컨트롤의 두 인스턴스에 적용됩니다. 다음은 Style{StaticResource} 태그 확장으로 참조하여 각 컨트롤의 FrameworkElement.Style 속성을 설정하는 예제입니다.

<StackPanel x:Name="rootPanel">
  <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 TextBox that specifies that
              the Width is 200, Height is 30, 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 Text="First Name:" Style="{StaticResource TextBlockStyle}"/>
    <TextBox Style="{StaticResource TextBoxStyle}"/>
  </StackPanel>
  <StackPanel Orientation="Horizontal">
    <TextBlock Text="Last Name:" Style="{StaticResource TextBlockStyle}"/>
    <TextBox Style="{StaticResource TextBoxStyle}"
             Margin="6,4,4,4"/>
  </StackPanel>
  <StackPanel x:Name="emailAddressPanel" Orientation="Horizontal"/>
</StackPanel>

설명

StyleTargetType 사용하거나 선언하는 모든 경우에 값이 필요합니다. 기본값은 없습니다. StyleFrameworkElement.Style 속성의 인라인 값으로 사용되는 에도 명시적 TargetType 값이 필요합니다.

값을 지정 TargetType 하는 일반적인 방법은 Style 요소의 XAML 특성을 사용하는 것입니다. XAML에서 설정하는 경우 의 TargetType 의미와 제공하는 값은 XAML에서 형식이 표현되는 방식의 몇 가지 측면을 사용합니다.

XAML의 경우 XAML 요소 사용을 통해 형식을 참조하는 데 필요한 모든 접두사를 특성 값에 TargetType 포함해야 합니다. 예를 들어 스타일이 "local:" 접두 TargetType 사에 매핑된 코드 네임스페이스에 정의된 사용자 지정 형식을 대상으로 하는 경우 해당 형식 스타일의 특성 값에는 형식 이름 앞에 동일한 접두사를 포함해야 합니다. 이 동작은 Windows 런타임 XAML 파서의 기본 제공 문자열 형식 변환 동작에 의해 활성화됩니다.

사용자 지정 형식에 대한 스타일을 정의할 때 에 대한 TargetType 매핑 접두사를 포함하면 해당 Style 내의 Setter의 속성 값에 접두사를 포함하지 않습니다.

에 제공하는 TargetType 값은 스타일 내에서 지정한 Setter.Property 값에 대한 조회 동작을 수정합니다. 특히 XAML 특성 값의 Setter.Property 이름으로 참조하는 종속성 속성은 형식 또는 상위 클래스에 TargetType 존재해야 합니다. 예를 들어 지정한 가 TargetTypeButton이고 Style의 XAML 특성 값 중 Setter.Property 하나가 "Background"이면 Control.Background 속성으로 확인됩니다(Control은 클래스 상속에서 Button보다 세 수준 높고 ButtonControl의 모든 속성을 상속합니다). 일반적인 UI 태그에서 사용할 UI 요소 이름과 동일한 UI 요소 이름으로 값을 지정 TargetType 하는 것이 일반적입니다. 일반적으로 상위 클래스의 이름을 지정하지는 않습니다(기술적으로 허용됨).

Style에 컨트롤 템플릿(Template 속성의 값)TargetType을 선언하는 Setter가 포함된 경우 부모 Style의 값은 포함된 ControlTemplate 요소의 TargetType 값과 일치해야 합니다.

암시적 스타일

스타일은 거의 항상 해당 스타일을 참조하는 앱의 각 UI 요소에 공유되고 적용되는 XAML 리소스로 선언됩니다. 리소스로 선언하려면 Style 요소를 포함한 모든 XAML 요소에는 런타임에 조회할 각 리소스를 구분하는 키가 리소스 컬렉션 내에 있어야 합니다. Style 요소(및 ControlTemplate과 같은 다양한 템플릿 요소)는 암시적 스타일이라는 기능을 지원합니다. 암시적 스타일의 경우 값에 제공하는 TargetType 값은 리소스 컬렉션 scope 해당 스타일의 키로도 사용되며 x:Key 특성 값을 지정할 필요가 없습니다. 반면, 리소스 컬렉션 내에서 선언하는 대부분의 다른 요소에는 명시적 x:Key 특성 값이 필요하며 이를 적용하는 디자인 타임 또는 파서 오류가 발생합니다.

암시적 스타일을 사용하여 선언된 스타일은 암시적 스타일의 와 일치하는 TargetType 형식인 instance 모든 UI 요소의 Style 값으로 사용됩니다. 이 동작을 가져오기 위해 컨트롤은 Style 특성 값과 키에 대한 {StaticResource} 태그 확장 참조가 있는 스타일을 참조할 필요가 없습니다. 이러한 컨트롤이 기존 암시적 스타일의 형식과 일치하는 경우 암시적 동작입니다.

암시적 스타일은 값으로 참조되는 형식의 하위 형식인 요소에는 TargetType 적용되지 않습니다. 예를 들어 ToggleButton 컨트롤에 대한 암시적 스타일을 선언하고 앱에 CheckBox 컨트롤(에서 ToggleButton파생됨)이CheckBox 있는 경우 스타일은 컨트롤에 ToggleButton 만 적용되지만 컨트롤에는 CheckBox 적용되지 않습니다.

Windows 런타임 Windows 런타임 API의 일부인 모든 실용적인 UI 요소에 대한 기본 암시적 스타일을 정의합니다. 이러한 스타일은 요소(특히 템플릿)에 대한 시각적 개체를 정의하고 시각적 개체가 없는 요소는 UI에 표시되거나 레이아웃에 참여하지 않기 때문에 이 작업을 수행해야 합니다. 이러한 모든 암시적 스타일은 generic.xaml이라는 디자인 도우미 XAML 파일에서 볼 수 있습니다. XAML을 편집하는 데 사용하는 도구는 도구에서 사용하도록 설정된 대로 스타일 복사본을 편집할 때 이 파일의 불연속 부분을 앱의 XAML에 복사할 수 있습니다. 기본 암시적 스타일 내에는 {ThemeResource} 태그 확장 및 테마별 브러시 또는 기타 리소스를 사용하는 테마 지원뿐만 아니라 여러 리소스 참조 계층이 있습니다. Windows 런타임 기본 암시적 스타일을 정의하는 암시적 스타일을 재정의할 수 있습니다. 자세한 내용은 XAML 스타일XAML 컨트롤 템플릿을 참조하세요.

코드에서 TargetType 사용

코드에서 설정하는 TargetType 것은 일반적이지 않습니다. XAML 스타일 시스템은 XAML을 리소스로 로드하고 스타일의 모든 측면을 미리 준비하는 데 사용됩니다. 코드에서 만들거나 참조하는 스타일 에서 TargetType을 설정해야 하는 런타임까지 컨트롤의 스타일을 지정하거나 스타일을 적용하는 방법에 대한 정보를 모르는 시나리오는 거의 없습니다.

코드에서 를 TargetType 가져오는 것도 일반적이지 않지만 이 작업을 수행할 수 있는 몇 가지 시나리오가 더 있을 수 있습니다. 예를 들어 XAML에 이미 정의된 명명된 Style 리소스 집합이 있을 수 있습니다. 그러나 컨트롤에 적용하려는 스타일에 적용하려는 컨트롤 TargetType 의 형식에 대해 작동하는 값이 있음을 두 번 검사 수 있습니다. 따라서 다음과 같은 코드가 있을 수 있습니다.

private bool VerifyStyle(FrameworkElement scope, String styleKey, Control applyTo)
{
    Style styleToCheck = scope.Resources[styleKey] as Style;
    if (styleToCheck != null)
    {
        if (styleToCheck.TargetType == applyTo.GetType())
        {
            // applyTo.Style = styleToCheck;
            return true;
        }
    }
    return false;
}

C#을 사용하여 프로그래밍하는 경우 TypeName 형식은 System.Type으로 프로젝트를 입력합니다. C#을 사용하여 프로그래밍하는 경우 일반적으로 연산자를 System.Type 사용하여 typeof 형식 이름을 문자열로 기반으로 형식의 에 대한 참조를 가져옵니다.

마이그레이션 정보

  • WPF(Windows Presentation Foundation용 XAML)를 사용한 경우 x:Type 태그 확장을 사용하여 System.Type을 사용하는 XAML 값을 입력했을 수 있습니다. Windows 런타임 XAML 파서는 x:Type을 지원하지 않습니다. 대신 태그 확장을 사용하지 않고 이름으로 형식을 참조해야 하며 필요한 XAML-지원 형식 변환은 이미 XAML 파서의 기본 제공 변환 동작에 의해 처리됩니다.

적용 대상