다음을 통해 공유


ListBox 스타일 및 템플릿

업데이트: 2011년 4월

이 항목에서는 ListBox 컨트롤의 스타일 및 템플릿에 대해 설명합니다. 기본 ControlTemplate을 수정하여 컨트롤에 고유한 모양을 지정할 수 있습니다. 자세한 내용은 ControlTemplate을 만들어 기존 컨트롤의 모양 사용자 지정을 참조하십시오.

ListBox 요소

ListBox 컨트롤에는 명명된 요소가 없습니다.

ListBox에 대한 ControlTemplate을 만들 경우 템플릿의 ScrollViewer 내에 ItemsPresenter가 포함될 수 있습니다. ItemsPresenter는 각 항목을 ListBox에 표시하고 ScrollViewer는 컨트롤 내에서 스크롤할 수 있도록 합니다. ItemsPresenterScrollViewer의 직계 자식이 아니면 ItemsPresenter에 ItemsPresenter라는 이름을 지정해야 합니다.

ListBox 상태

다음 표에서는 ListBox 컨트롤의 시각적 상태를 보여 줍니다.

VisualState 이름

VisualStateGroup 이름

설명

Valid

ValidationStates

컨트롤이 유효합니다.

InvalidFocused

ValidationStates

컨트롤이 잘못되었지만 포커스가 있습니다.

InvalidUnfocused

ValidationStates

컨트롤이 잘못되었으며 포커스가 없습니다.

ListBoxItem 요소

ListBoxItem 컨트롤에는 명명된 요소가 없습니다.

ListBoxItem 상태

다음 표에서는 ListBox 컨트롤의 시각적 상태를 보여 줍니다.

VisualState 이름

VisualStateGroup 이름

설명

보통

CommonStates

기본 상태입니다.

MouseOver

CommonStates

마우스 포인터가 컨트롤 위에 있습니다.

Disabled

CommonStates

항목을 사용할 수 없습니다.

Focused

FocusStates

항목에 포커스가 있습니다.

Unfocused

FocusStates

항목에 포커스가 없습니다.

선택하지 않음

SelectionStates

항목이 현재 선택되어 있습니다.

선택함

SelectionStates

항목이 선택되어 있지 않습니다.

SelectedUnfocused

SelectionStates

항목이 선택되었지만 포커스가 없습니다.

Valid

ValidationStates

이 컨트롤은 Validation 클래스를 사용하며 연결된 속성 Validation.HasError는 false입니다.

InvalidFocused

ValidationStates

컨트롤에 포커스가 있는 경우 연결된 속성 Validation.HasError는 true입니다.

InvalidUnfocused

ValidationStates

컨트롤에 포커스가 없는 경우 연결된 속성 Validation.HasError는 true입니다.

ListBox ControlTemplate 예제

다음 예제에서는 ListBoxListBoxItem 컨트롤에 대한 ControlTemplate을 정의하는 방법을 보여 줍니다.

<Style x:Key="{x:Type ListBox}"
       TargetType="ListBox">
  <Setter Property="SnapsToDevicePixels"
          Value="true" />
  <Setter Property="OverridesDefaultStyle"
          Value="true" />
  <Setter Property="ScrollViewer.HorizontalScrollBarVisibility"
          Value="Auto" />
  <Setter Property="ScrollViewer.VerticalScrollBarVisibility"
          Value="Auto" />
  <Setter Property="ScrollViewer.CanContentScroll"
          Value="true" />
  <Setter Property="MinWidth"
          Value="120" />
  <Setter Property="MinHeight"
          Value="95" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBox">
        <Border Name="Border"
                BorderThickness="1"
                CornerRadius="2">
          <Border.Background>
            <SolidColorBrush Color="{StaticResource ControlLightColor}" />
          </Border.Background>
          <Border.BorderBrush>
            <SolidColorBrush Color="{StaticResource BorderMediumColor}" />
          </Border.BorderBrush>
          <ScrollViewer Margin="0"
                        Focusable="false">
            <StackPanel Margin="2"
                        IsItemsHost="True" />
          </ScrollViewer>
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsEnabled"
                   Value="false">
            <Setter TargetName="Border"
                    Property="Background">
              <Setter.Value>
                <SolidColorBrush Color="{StaticResource DisabledControlLightColor}" />
              </Setter.Value>
            </Setter>
            <Setter TargetName="Border"
                    Property="BorderBrush">
              <Setter.Value>
                <SolidColorBrush Color="{DynamicResource DisabledBorderLightColor}" />
              </Setter.Value>

            </Setter>
          </Trigger>
          <Trigger Property="IsGrouping"
                   Value="true">
            <Setter Property="ScrollViewer.CanContentScroll"
                    Value="false" />
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

<Style x:Key="{x:Type ListBoxItem}"
       TargetType="ListBoxItem">
  <Setter Property="SnapsToDevicePixels"
          Value="true" />
  <Setter Property="OverridesDefaultStyle"
          Value="true" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBoxItem">
        <Border x:Name="Border"
                Padding="2"
                SnapsToDevicePixels="true">
          <Border.Background>
            <SolidColorBrush Color="Transparent" />
          </Border.Background>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="SelectionStates">
              <VisualState x:Name="Unselected" />
              <VisualState x:Name="Selected">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
                                                Storyboard.TargetProperty="(Panel.Background).
                    (SolidColorBrush.Color)">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource SelectedBackgroundColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="SelectedUnfocused">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
                                                Storyboard.TargetProperty="(Panel.Background).
                    (SolidColorBrush.Color)">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource SelectedUnfocusedColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <ContentPresenter />
        </Border>
      </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>

전체 샘플을 보려면 Styling with ControlTemplates 샘플을 참조하십시오.

참고 항목

참조

Style

ControlTemplate

개념

스타일 지정 및 템플릿

ControlTemplate을 만들어 기존 컨트롤의 모양 사용자 지정

기타 리소스

Control 스타일 및 템플릿

컨트롤 사용자 지정

변경 기록

날짜

변경 내용

이유

2011년 4월

ControlTemplateItemsPresenterScrollViewer를 포함하는 방법에 대한 설명을 추가했습니다.

향상된 기능 관련 정보

2010년 8월

ControlTemplate 예제를 추가했습니다.

향상된 기능 관련 정보