이 항목에서는 TabControl 컨트롤의 스타일 및 템플릿을 설명합니다. 기본 ControlTemplate을(를) 수정하여 컨트롤의 고유한 모양을 줄 수 있습니다. 자세한 내용은 컨트롤을 위한 템플릿 만들기를 참조하세요.
TabControl 파트
다음 표에서는 TabControl 컨트롤의 명명된 부분을 나열합니다.
부분 | 유형 | 설명 |
---|---|---|
PART_SelectedContentHost | ContentPresenter | 현재 선택된 TabItem의 콘텐츠를 표시하는 개체입니다. |
Menu에 대한 ControlTemplate을 만드는 경우 템플릿은 ScrollViewer 내에 ItemsPresenter를 포함할 수도 있습니다. (ItemsPresenter는 TabControl에 각 항목을 표시하며, ScrollViewer는 컨트롤 내에서 스크롤을 가능하게 합니다.)
ItemsPresenter가 ScrollViewer의 직접 자식이 아닌 경우 ItemsPresenter에 ItemsPresenter
라는 이름을 지정해야 합니다.
TabControl 상태
다음 표에서는 TabControl 컨트롤의 시각적 상태를 나열합니다.
VisualState 이름 | VisualStateGroup 이름 | 설명 |
---|---|---|
정상 | 공통 상태들 | 기본 상태입니다. |
비활성화 | 공통 상태들 | 컨트롤이 비활성화되었습니다. |
유효 | 유효성 검사 상태 | 컨트롤에서 Validation 클래스를 사용하고 연결된 속성 Validation.HasError은 false 입니다. |
유효하지 않은 포커스 | 유효성 검사 상태 |
Validation.HasError 연결된 속성은 true 이며, 컨트롤에 포커스가 있습니다. |
유효하지 않음 - 초점이 맞춰지지 않음 | 유효성 검사 상태 |
Validation.HasError 연결된 속성은 true 이며 컨트롤이 포커스를 잃었습니다. |
TabItem 파트
TabItem 컨트롤에는 명명된 파트가 없습니다.
TabItem 상태
다음 표에서는 TabItem 컨트롤의 시각적 상태를 나열합니다.
VisualState 이름 | VisualStateGroup 이름 | 설명 |
---|---|---|
정상 | 공통 상태들 | 기본 상태입니다. |
마우스 오버 | 공통 상태들 | 마우스 포인터가 컨트롤 위에 있습니다. |
비활성화 | 공통 상태들 | 컨트롤이 비활성화되었습니다. |
집중 | FocusStates | 컨트롤에 포커스가 있습니다. |
포커스 없음 | FocusStates | 컨트롤에 포커스가 없습니다. |
선택됨 | 선택 상태 | 컨트롤이 선택됩니다. |
선택되지 않음 | 선택 상태 | 컨트롤이 선택되지 않았습니다. |
유효 | 유효성 검사 상태 | 컨트롤에서 Validation 클래스를 사용하고 연결된 속성 Validation.HasError은 false 입니다. |
유효하지 않은 포커스 | 유효성 검사 상태 |
Validation.HasError 연결된 속성은 true 이며, 컨트롤에 포커스가 있습니다. |
유효하지 않음 - 초점이 맞춰지지 않음 | 유효성 검사 상태 |
Validation.HasError 연결된 속성은 true 이며 컨트롤이 포커스를 잃었습니다. |
TabControl ControlTemplate 예제
다음 예제에서는 ListBox 및 ListBoxItem 컨트롤에 대한 ControlTemplate을 정의하는 방법을 보여 줍니다.
<Style TargetType="{x:Type TabControl}">
<Setter Property="OverridesDefaultStyle"
Value="True" />
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabControl}">
<Grid KeyboardNavigation.TabNavigation="Local">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Disabled">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Border.BorderBrush).
(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="#FFAAAAAA" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<TabPanel x:Name="HeaderPanel"
Grid.Row="0"
Panel.ZIndex="1"
Margin="0,0,4,-1"
IsItemsHost="True"
KeyboardNavigation.TabIndex="1"
Background="Transparent" />
<Border x:Name="Border"
Grid.Row="1"
BorderThickness="1"
CornerRadius="2"
KeyboardNavigation.TabNavigation="Local"
KeyboardNavigation.DirectionalNavigation="Contained"
KeyboardNavigation.TabIndex="2">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1"
StartPoint="0.5,0">
<GradientStop Color="{DynamicResource ContentAreaColorLight}"
Offset="0" />
<GradientStop Color="{DynamicResource ContentAreaColorDark}"
Offset="1" />
</LinearGradientBrush>
</Border.Background>
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BorderMediumColor}"/>
</Border.BorderBrush>
<ContentPresenter x:Name="PART_SelectedContentHost"
Margin="4"
ContentSource="SelectedContent" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid x:Name="Root">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource ControlPressedColor}" />
</ColorAnimationUsingKeyFrames>
<ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderThickness)"
Storyboard.TargetName="Border">
<EasingThicknessKeyFrame KeyTime="0"
Value="1,1,1,0" />
</ThicknessAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver" />
<VisualState x:Name="Disabled">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource DisabledControlDarkColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Border.BorderBrush).
(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource DisabledBorderLightColor}"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="Border"
Margin="0,0,-4,0"
BorderThickness="1,1,1,1"
CornerRadius="2,12,0,0">
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
</Border.BorderBrush>
<Border.Background>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource ControlLightColor}"
Offset="0.0" />
<GradientStop Color="{DynamicResource ControlMediumColor}"
Offset="1.0" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header"
Margin="12,2,12,2"
RecognizesAccessKey="True" />
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="Panel.ZIndex"
Value="100" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
앞의 예제에서는 다음 리소스를 하나 이상 사용합니다.
<!--Control colors.-->
<Color x:Key="WindowColor">#FFE8EDF9</Color>
<Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color>
<Color x:Key="ContentAreaColorDark">#FF7381F9</Color>
<Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color>
<Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color>
<Color x:Key="DisabledForegroundColor">#FF888888</Color>
<Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color>
<Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color>
<Color x:Key="ControlLightColor">White</Color>
<Color x:Key="ControlMediumColor">#FF7381F9</Color>
<Color x:Key="ControlDarkColor">#FF211AA9</Color>
<Color x:Key="ControlMouseOverColor">#FF3843C4</Color>
<Color x:Key="ControlPressedColor">#FF211AA9</Color>
<Color x:Key="GlyphColor">#FF444444</Color>
<Color x:Key="GlyphMouseOver">sc#1, 0.004391443, 0.002428215, 0.242281124</Color>
<!--Border colors-->
<Color x:Key="BorderLightColor">#FFCCCCCC</Color>
<Color x:Key="BorderMediumColor">#FF888888</Color>
<Color x:Key="BorderDarkColor">#FF444444</Color>
<Color x:Key="PressedBorderLightColor">#FF888888</Color>
<Color x:Key="PressedBorderDarkColor">#FF444444</Color>
<Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color>
<Color x:Key="DisabledBorderDarkColor">#FF888888</Color>
<Color x:Key="DefaultBorderBrushDarkColor">Black</Color>
<!--Control-specific resources.-->
<Color x:Key="HeaderTopColor">#FFC5CBF9</Color>
<Color x:Key="DatagridCurrentCellBorderColor">Black</Color>
<Color x:Key="SliderTrackDarkColor">#FFC5CBF9</Color>
<Color x:Key="NavButtonFrameColor">#FF3843C4</Color>
<LinearGradientBrush x:Key="MenuPopupBrush"
EndPoint="0.5,1"
StartPoint="0.5,0">
<GradientStop Color="{DynamicResource ControlLightColor}"
Offset="0" />
<GradientStop Color="{DynamicResource ControlMediumColor}"
Offset="0.5" />
<GradientStop Color="{DynamicResource ControlLightColor}"
Offset="1" />
</LinearGradientBrush>
<LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill"
StartPoint="0,0"
EndPoint="1,0">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#000000FF"
Offset="0" />
<GradientStop Color="#600000FF"
Offset="0.4" />
<GradientStop Color="#600000FF"
Offset="0.6" />
<GradientStop Color="#000000FF"
Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
전체 샘플을 보려면 ControlTemplates로 스타일링 샘플을 참조하세요.
참고하십시오
- Style
- ControlTemplate
- Control 스타일 및 템플릿
- 컨트롤 맞춤설정
- 스타일링 및 템플링
- 템플릿을 생성합니다.
.NET Desktop feedback