ContentControl.ContentTemplateSelector ContentControl.ContentTemplateSelector ContentControl.ContentTemplateSelector ContentControl.ContentTemplateSelector Property

정의

애플리케이션 작성기에서 사용자 지정 템플릿 선택 논리를 제공하도록 하는 템플릿 선택기를 가져오거나 설정합니다.Gets or sets a template selector that enables an application writer to provide custom template-selection logic.

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; }
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector

속성 값

데이터 템플릿 선택기입니다.A data template selector. 기본값은 null입니다.The default value is null.

예제

다음 예제에서는 ContentTemplateSelector 속성을 사용하는 방법을 보여 줍니다.The following example shows how to use the ContentTemplateSelector property. 이 예제에서 선택한 항목에 바인딩합니다를 ComboBoxContent 의 속성을 Label에서 상속 하는 ContentControl합니다.This example binds the selected item in a ComboBox to the Content property of a Label, which inherits from ContentControl. 선택한 항목의 값에서 검은색 사각형 안에 나타납니다 사용자가 5 보다 작은 값을 선택 하면는 Label합니다.When the user selects a value below 5, the value of the selected item appears in a black square in the Label. 5는 값을 선택할 때 이상이 면 녹색 타원에 값이 나타납니다.When the user selects a value that is 5 or above, the value appears in a green ellipse. 이 예제에서는 두 개의 여이 수행 DataTemplate 개체 및 DataTemplateSelector로 설정 되는 ContentTemplateSelector 속성 적절 한 선택 DataTemplate 선택한 항목의 값을 기반으로 합니다.The example accomplishes this by creating two DataTemplate objects and a DataTemplateSelector, which is set to the ContentTemplateSelector property and chooses the appropriate DataTemplate based on the value of the selected item.

<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 각 데이터 개체의 속성을 기반으로 적용 합니다.Typically, you create a DataTemplateSelector when you have more than one DataTemplate for the same type of objects and you want to supply your own logic to choose a DataTemplate to apply based on the properties of each data object. 다른 개체가 여러 개 있는 경우 형식을 설정할 수는 DataType 속성에는 DataTemplate합니다.Note that if you have objects of different types you can set the DataType property on the DataTemplate. 이렇게 할 경우 만들 필요가 없습니다를 DataTemplateSelector입니다.If you do that, then there is no need to create a DataTemplateSelector. 또한 동일한 형식의 있지만 다른 속성을 사용 하 여 개체에 있으면 수도 있습니다를 사용 하 여를 DataTrigger 또는 데이터 변환기입니다.Furthermore, if you have objects of the same type but with different properties, you can also consider using a DataTrigger or a data converter. 자세한 내용은 데이터 템플릿 개요를 참조하세요.For more information, see Data Templating Overview.

템플릿 선택기를 만들려면에서 상속 되는 클래스를 만듭니다 DataTemplateSelector 재정의 SelectTemplate 메서드.To create a template selector, create a class that inherits from DataTemplateSelector and override the SelectTemplate method. 클래스를 정의한 후에 요소의 템플릿 선택기 속성에는 클래스의 인스턴스를 할당할 수 있습니다.After your class is defined, you can assign an instance of the class to the template selector property of your element.

두 경우는 ContentTemplateSelector 하며 ContentTemplate 속성이 설정 된 후이 속성은 무시 됩니다.If both the ContentTemplateSelector and the ContentTemplate properties are set, then this property is ignored.

XAML 특성 사용XAML Attribute Usage

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

XAML 값XAML Values

ResourceExtensionResourceExtension
템플릿 리소스를 하거나 참조 하는 방법을 식별 하는 태그 확장 StaticResource 또는 DynamicResource합니다.A markup extension that identifies how to reference the template resource, either StaticResource or DynamicResource. 참조 XAML 리소스합니다.See XAML Resources.

TemplateSelectorKeyTemplateSelectorKey
요청된 된 템플릿 선택기를 식별 하는 키입니다.The key that identifies the requested template selector. 키의 기존 리소스에 참조를 ResourceDictionary입니다.The key refers to an existing resource in a ResourceDictionary.

종속성 속성 정보Dependency Property Information

식별자 필드Identifier field ContentTemplateSelectorProperty
메타 데이터 속성 설정 trueMetadata properties set to true 없음None

적용 대상