Control.Template 속성
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
컨트롤 템플릿을 가져오거나 설정합니다. 컨트롤 템플릿은 UI에서 컨트롤의 시각적 모양을 정의하고 XAML 태그에 정의됩니다.
public:
property ControlTemplate ^ Template { ControlTemplate ^ get(); void set(ControlTemplate ^ value); };
ControlTemplate Template();
void Template(ControlTemplate value);
public ControlTemplate Template { get; set; }
var controlTemplate = control.template;
control.template = controlTemplate;
Public Property Template As ControlTemplate
<control Template="{StaticResource templateResourceKey}"/>
- or -
<Style TargetType="controlTypeName">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controlTypeName">
templateRoot
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
속성 값
Control의 모양을 정의하는 템플릿입니다. ControlTemplate 정확히 하나의 루트 요소가 해당 콘텐츠로 있어야 합니다.
예제
이 예제에서는 값이 "Template"인 a Style 로 Setter Setter.Property 정의된 보다 완전한 컨트롤 템플릿을 보여줍니다. 컨트롤의 명명된 스타일입니다 RadioButton . 일반적으로 기능 컨트롤 템플릿의 일부인 템플릿 요소(예: 템플릿의 루트 요소에 연결된 VisualStateManager.VisualStateGroups 연결된 속성 요소) 및 각 눈에 띄는 컨트롤 파트에 할당된 x:Name 특성 값이 포함됩니다.
<Style x:Key="TextRadioButtonStyle" TargetType="RadioButton">
<Setter Property="MinWidth" Value="0"/>
<Setter Property="MinHeight" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Grid Background="Transparent">
<TextBlock
x:Name="Text"
Text="{TemplateBinding Content}"
Margin="3,-7,3,10"
TextWrapping="NoWrap"
Style="{StaticResource SubheaderTextStyle}"/>
<Rectangle
x:Name="FocusVisualWhite"
IsHitTestVisible="False"
Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}"
StrokeEndLineCap="Square"
StrokeDashArray="1,1"
Opacity="0"
StrokeDashOffset="1.5"/>
<Rectangle
x:Name="FocusVisualBlack"
IsHitTestVisible="False"
Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}"
StrokeEndLineCap="Square"
StrokeDashArray="1,1"
Opacity="0"
StrokeDashOffset="0.5"/>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="PointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPointerOverForegroundThemeBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ButtonDisabledForegroundThemeBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualWhite" Storyboard.TargetProperty="Opacity"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualBlack" Storyboard.TargetProperty="Opacity"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked"/>
<VisualState x:Name="Unchecked">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Indeterminate"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
설명
위에 표시된 두 번째 XAML 구문은 Setter .의 일부로 구문입니다 Style. 이는 거의 모든 경우에 템플릿 Control 값이 정의되는 방법입니다.
TargetType 는 템플릿 값으로 사용되는 모든 ControlTemplate 요소에 필요한 특성입니다. style-setter 구문을 사용하는 경우 값은 for Template이 포함된 Setter 속성 Style 과 일치 TargetType 해야 합니다.
의 ControlTemplate 모양을 Control지정합니다. a에 Control 없는 ControlTemplateControl 경우 앱에 표시되는 존재가 없습니다. 컨트롤 작성자가 기본 컨트롤 템플릿을 정의하고 앱 작성자가 XAML의 템플릿 ControlTemplate 을 다시 지정하여 컨트롤의 시각적 트리를 다시 정의할 수 있습니다.
Control 템플릿은 일반적으로 컨트롤별 암시적 스타일의 일부로 XAML(Extensible Application Markup Language)에서 설정됩니다. 이 경우 Property 값 Setter 은 문자열 "Template"으로 설정되고 Setter.Value 값은 개체 요소를 포함하는 속성 요소로 설정됩니다 ControlTemplate . 예를 들어 이는 에 Style 대한 ScrollViewer템플릿 값을 정의하는 것입니다. 암시적 스타일의 예입니다. 여기서 Style 는 x:Key 특성이 필요 없지만 있을 수 ResourceDictionary 있습니다.
<ResourceDictionary>
<Style TargetType="ScrollViewer">
...
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollViewer">
<!--visual root of template for a ScrollViewer-->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
...
</ResourceDictionary>
스타일 및 템플릿
a in을 Setter Style 사용하여 종속성 속성에 값을 적용할 수 있습니다. Setter 그러나 일반적인 StyleXAML 태그의 Control대부분을 구성하는 -derived 클래스의 Template 속성에 대한 것입니다. 컨트롤 템플릿 TargetType Style 을 Style 정의하는 데 사용되는 경우 해당 Control.Template setter에 대한 요소와 TargetType 요소의 ControlTemplate 값은 항상 동일한 값을 사용해야 합니다. 템플릿 setter는 해당 템플릿이 적용되는 컨트롤에 대한 기본 템플릿 UI 정의를 정의합니다. 컨트롤의 시각적 상태와 기본 테마 전환과 같은 기타 상태 기반 UI 정의도 포함됩니다. 같은 ListBox복잡한 컨트롤의 경우 기본 템플릿 Style 및 ControlTemplate 내 컨트롤에는 수백 줄의 XAML이 있을 수 있습니다. 컨트롤 템플릿 시나리오에서 템플릿의 역할에 대한 자세한 내용은 빠른 시작: 컨트롤 템플릿을 참조하세요.
암시적 스타일
이러한 개체의 각 인스턴스가 Style 값을 구체적으로 참조 Style FrameworkElement.Style 하지 않고도 동일한 TargetType모든 개체에서 암시적으로 사용되도록 스타일을 정의할 수 있습니다. 리소스가 <Style> x:Key 특성 없이 선언된 ResourceDictionary 경우 x:Key 값은 속성 값을 TargetType 사용합니다. 스타일을 암시적으로 설정하는 경우 스타일은 값에서 TargetType 파생된 요소가 아니라 정확히 일치하는 TargetType 형식에만 적용됩니다. 예를 들어 애플리케이션의 모든 ToggleButton 컨트롤에 대해 암시적으로 스타일을 만들고 애플리케이션 ToggleButton 에 컨트롤(CheckBoxCheckBox파생ToggleButton)이 있는 경우 "ToggleButton" 암시적 스타일은 컨트롤에 ToggleButton 만 적용됩니다.
적용 대상
추가 정보
피드백
다음에 대한 사용자 의견 제출 및 보기