다음을 통해 공유


ContentControl.ContentTemplateSelector 속성

정의

애플리케이션 작성기에서 사용자 지정 템플릿 선택 논리를 제공하도록 하는 템플릿 선택기를 가져오거나 설정합니다.

public:
 property System::Windows::Controls::DataTemplateSelector ^ ContentTemplateSelector { System::Windows::Controls::DataTemplateSelector ^ get(); void set(System::Windows::Controls::DataTemplateSelector ^ value); };
[System.ComponentModel.Bindable(true)]
public System.Windows.Controls.DataTemplateSelector ContentTemplateSelector { get; set; }
[<System.ComponentModel.Bindable(true)>]
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector

속성 값

DataTemplateSelector

데이터 템플릿 선택기입니다. 기본값은 null입니다.

특성

예제

다음 예제에서는 ContentTemplateSelector 속성을 사용하는 방법을 보여 줍니다. 이 예제에서 선택한 항목에 바인딩합니다를 ComboBoxContent 의 속성을 Label에서 상속 하는 ContentControl합니다. 선택한 항목의 값에서 검은색 사각형 안에 나타납니다 사용자가 5 보다 작은 값을 선택 하면는 Label합니다. 5는 값을 선택할 때 이상이 면 녹색 타원에 값이 나타납니다. 이 예제에서는 두 개의 여이 수행 DataTemplate 개체 및 DataTemplateSelector로 설정 되는 ContentTemplateSelector 속성 적절 한 선택 DataTemplate 선택한 항목의 값을 기반으로 합니다.

<Window.Resources>

  <!--Create two DataTemplate objects to be 
  selected by the DataTemplateSelector.-->
  <DataTemplate x:Key="numberTemplate">
    <Grid>
      <Rectangle Stroke="Black" />
      <TextBlock Margin="5" Text="{Binding}" FontSize="18"/>
    </Grid>
  </DataTemplate>

  <DataTemplate x:Key="largeNumberTemplate">
    <Grid>
      <Ellipse Stroke="Green" StrokeThickness="4"/>
      <TextBlock Margin="10" Text="{Binding}" FontSize="24" 
                 Foreground="Red" FontWeight="Bold" />
    </Grid>
  </DataTemplate>

  <local:NumberDataTemplateSelector x:Key="numberTemplateSelector"
                                    NumberTemplate="{StaticResource numberTemplate}"
                                    LargeNumberTemplate="{StaticResource largeNumberTemplate}"/>

</Window.Resources>
<StackPanel>

  <!--Bind the content of the Label to the selected item 
  in the ComboBox.-->
  <Label  Foreground="Black"
          Content="{Binding ElementName=numberList, Path=SelectedItem.Content}"
          ContentTemplateSelector="{StaticResource numberTemplateSelector}">
  </Label>

  <ComboBox Name="numberList">
    <ComboBoxItem>1</ComboBoxItem>
    <ComboBoxItem>2</ComboBoxItem>
    <ComboBoxItem>3</ComboBoxItem>
    <ComboBoxItem>4</ComboBoxItem>
    <ComboBoxItem>5</ComboBoxItem>
    <ComboBoxItem>6</ComboBoxItem>
    <ComboBoxItem IsSelected="True">7</ComboBoxItem>
    <ComboBoxItem>8</ComboBoxItem>
    <ComboBoxItem>9</ComboBoxItem>
    <ComboBoxItem>10</ComboBoxItem>
  </ComboBox>

</StackPanel>
public class NumberDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate NumberTemplate { get; set; }
    public DataTemplate LargeNumberTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        // Null value can be passed by IDE designer
        if (item == null) return null;

        var num = Convert.ToInt32((string)item);
        
        // Select one of the DataTemplate objects, based on the 
        // value of the selected item in the ComboBox.
        if (num < 5)
        {
            return NumberTemplate;
        }
        else
        {
            return LargeNumberTemplate;
        }
    }
}
Public Class NumberDataTemplateSelector
    Inherits DataTemplateSelector

    Public Property NumberTemplate As DataTemplate
    Public Property LargeNumberTemplate As DataTemplate

    Public Overrides Function SelectTemplate(ByVal item As Object, _
                    ByVal container As DependencyObject) As DataTemplate

        ' Nothing can be passed by IDE designer
        if (item Is Nothing) Then
            Return Nothing
        End If

        Dim num = Convert.ToInt32(CStr(item))

        ' Select one of the DataTemplate objects, based on the 
        ' value of the selected item in the ComboBox.
        If num < 5 Then
            Return NumberTemplate

        Else
            Return LargeNumberTemplate
        End If

    End Function 'SelectTemplate
End Class

설명

일반적으로 DataTemplateSelector 둘 이상 있는 경우 DataTemplate 선택 하는 사용자 고유의 논리를 제공 하려면 동일한 유형의 개체에 대 한를 DataTemplate 각 데이터 개체의 속성을 기반으로 적용 합니다. 다른 개체가 여러 개 있는 경우 형식을 설정할 수는 DataType 속성에는 DataTemplate합니다. 이렇게 할 경우 만들 필요가 없습니다를 DataTemplateSelector입니다. 또한 동일한 형식의 있지만 다른 속성을 사용 하 여 개체에 있으면 수도 있습니다를 사용 하 여를 DataTrigger 또는 데이터 변환기입니다. 자세한 내용은 데이터 템플릿 개요를 참조하세요.

템플릿 선택기를 만들려면에서 상속 되는 클래스를 만듭니다 DataTemplateSelector 재정의 SelectTemplate 메서드. 클래스를 정의한 후에 요소의 템플릿 선택기 속성에는 클래스의 인스턴스를 할당할 수 있습니다.

두 경우는 ContentTemplateSelector 하며 ContentTemplate 속성이 설정 된 후이 속성은 무시 됩니다.

XAML 특성 사용

<object ContentTemplateSelector="{ResourceExtension TemplateSelectorKey}"/>  

XAML 값

ResourceExtension
템플릿 리소스를 하거나 참조 하는 방법을 식별 하는 태그 확장 StaticResource 또는 DynamicResource합니다. 참조 XAML 리소스합니다.

TemplateSelectorKey
요청된 된 템플릿 선택기를 식별 하는 키입니다. 키의 기존 리소스에 참조를 ResourceDictionary입니다.

종속성 속성 정보

식별자 필드 ContentTemplateSelectorProperty
메타 데이터 속성 설정 true 없음

적용 대상