다음을 통해 공유


HierarchicalDataTemplate.ItemContainerStyleSelector 속성

정의

각 항목 컨테이너에 적용할 수 있는 스타일의 사용자 지정 스타일 선택 논리를 가져오거나 설정합니다.

public:
 property System::Windows::Controls::StyleSelector ^ ItemContainerStyleSelector { System::Windows::Controls::StyleSelector ^ get(); void set(System::Windows::Controls::StyleSelector ^ value); };
public System.Windows.Controls.StyleSelector ItemContainerStyleSelector { get; set; }
member this.ItemContainerStyleSelector : System.Windows.Controls.StyleSelector with get, set
Public Property ItemContainerStyleSelector As StyleSelector

속성 값

StyleSelector

StyleSelector로 사용할 스타일을 선택하는 ItemContainerStyle입니다. 기본값은 null입니다.

예제

다음 예제에서는 TreeView 를 사용 하는 ItemContainerStyleHierarchicalDataTemplate 의 두 번째 수준에는 항목에 대 한 두 스타일 중에서 선택할 수는 TreeView.

<StackPanel Name="sp1" x:FieldModifier="public">
  <StackPanel.Resources>
    <src:TreeViewData x:Key="dataItems"/>

    <Style x:Key="TreeViewItemStyle1"  TargetType="TreeViewItem">
      <Setter Property="Foreground" Value="Navy"/>
      <Setter Property="FontStyle" Value="Italic"/>
    </Style>

    <Style x:Key="TreeViewItemStyle2"  TargetType="TreeViewItem">
      <Setter Property="Foreground" Value="Green"/>
      <Setter Property="FontWeight" Value="Bold"/>
    </Style>

    <src:TreeViewItemStyleSelector x:Key="tviSelector"/>
    
    <HierarchicalDataTemplate DataType="{x:Type src:ItemsForTreeView}"
                              ItemsSource="{Binding Path=SecondLevelItems}"
                              ItemContainerStyleSelector="{StaticResource tviSelector}">

      <!--Display the TopLevelName property in the first level.-->
      <TextBlock Text="{Binding Path=TopLevelName}"/>
      
      <!--Display each string in the SecondLevelItems property in
          the second level.-->
      <HierarchicalDataTemplate.ItemTemplate>
          <DataTemplate>
              <TextBlock Text="{Binding}"/>
          </DataTemplate>
      </HierarchicalDataTemplate.ItemTemplate>
      
    </HierarchicalDataTemplate>
  </StackPanel.Resources>

  <TreeView Height="200" ItemsSource="{Binding Source={StaticResource dataItems}}"
            VirtualizingStackPanel.IsVirtualizing="True">
    <TreeView.ItemContainerStyle>

      <!--Expand each TreeViewItem in the first level.-->
      <Style TargetType="TreeViewItem">
        <Setter Property="IsExpanded" Value="True"/>
      </Style>
    </TreeView.ItemContainerStyle>
  </TreeView>
</StackPanel>

다음 예제는 StyleSelector 앞의 예제에서 사용 되는 합니다.

public class TreeViewItemStyleSelector : StyleSelector
{
    public override Style SelectStyle(object item, DependencyObject container)
    {
        string itemString = item as string;

        string[] strings = itemString.Split(null);
        int value;
        
        if (!Int32.TryParse(strings[strings.Length - 1], out value))
        {
            return null;
        }

        StackPanel sp = ((Window1) Application.Current.MainWindow).sp1;

        if (value < 5)
        {
            return sp.FindResource("TreeViewItemStyle1") as Style;
        }
        else
        {
            return sp.FindResource("TreeViewItemStyle2") as Style;
        }
    }
}
Public Class TreeViewItemStyleSelector
    Inherits StyleSelector
    Public Overloads Overrides Function SelectStyle(ByVal item As Object, ByVal container As DependencyObject) As Style
        Dim itemString As String = TryCast(item, String)

        Dim strings As String() = itemString.Split(Nothing)
        Dim value As Integer

        If Not Int32.TryParse(strings(strings.Length - 1), value) Then
            Return Nothing
        End If

        Dim win1 As Window1 = CType(Application.Current.MainWindow, Window1)
        Dim sp As StackPanel = win1.sp1

        If value < 5 Then
            Return TryCast(sp.FindResource("TreeViewItemStyle1"), Style)
        Else
            Return TryCast(sp.FindResource("TreeViewItemStyle2"), Style)
        End If

    End Function
End Class

다음 예제에서는 이전 예제에서 사용 되는 데이터를 만듭니다.

public class TreeViewData : ObservableCollection<ItemsForTreeView>
{

    public TreeViewData()
    {
        for (int i = 0; i < 100; ++i)
        {
            ItemsForTreeView item = new ItemsForTreeView();
            item.TopLevelName = "item " + i.ToString();
            Add(item);
        }
    }
}

public class ItemsForTreeView
{
    public string TopLevelName { get; set; }
    private ObservableCollection<string> level2Items;

    public ObservableCollection<string> SecondLevelItems
    {
        get 
        {
            level2Items ??= new ObservableCollection<string>();
            return level2Items;
        }
    }

    public ItemsForTreeView()
    {
        for (int i = 0; i < 10; ++i)
        {
            SecondLevelItems.Add("Second Level " + i.ToString());
        }
    }
}
Public Class TreeViewData
    Inherits ObservableCollection(Of ItemsForTreeView)

    Public Sub New()
        For i As Integer = 0 To 99
            Dim item As New ItemsForTreeView()
            item.TopLevelName = "item " & i.ToString()
            Add(item)
        Next
    End Sub
End Class


Public Class ItemsForTreeView
    Private _TopLevelName As String
    Public Property TopLevelName() As String
        Get
            Return _TopLevelName
        End Get
        Set(ByVal value As String)
            _TopLevelName = value
        End Set
    End Property
    Private level2Items As ObservableCollection(Of String)

    Public ReadOnly Property SecondLevelItems() As ObservableCollection(Of String)
        Get
            If level2Items Is Nothing Then
                level2Items = New ObservableCollection(Of String)()
            End If
            Return level2Items
        End Get
    End Property

    Public Sub New()
        For i As Integer = 0 To 9
            SecondLevelItems.Add("Second Level " & i.ToString())
        Next
    End Sub
End Class

설명

사용 된 ItemContainerStyle 데이터 항목을 포함 하는 요소의 모양을 적용할 스타일을 설정 하는 속성입니다. 예를 들어 TreeView, 생성 된 컨테이너는 TreeViewItem 제어;에 대 한 Menu, 이들은 MenuItem 컨트롤입니다. 사용 하는 경우 정의 된 둘 이상의 스타일을 적용 하려면 하나를 선택 하는 논리를 제공 해야 하는 ItemContainerStyleSelector 속성 대신는 ItemContainerStyle 속성입니다. 있으면이 속성은 무시 됩니다는 ItemContainerStyle 속성을 설정 합니다.

적용 대상