이 항목은 아직 평가되지 않았습니다.- 이 항목 평가

ContentControl.ContentTemplateSelector 속성

업데이트: 2007년 11월

응용 프로그램 작성기에서 사용자 지정 템플릿 선택 논리를 제공하도록 하는 템플릿 선택기를 가져오거나 설정합니다. 이 속성은 종속성 속성입니다.

네임스페이스:  System.Windows.Controls
어셈블리:  PresentationFramework(PresentationFramework.dll)
XAML의 XMLNS: http://schemas.microsoft.com/winfx/xaml/presentation

[BindableAttribute(true)]
public DataTemplateSelector ContentTemplateSelector { get; set; }
/** @property */
/** @attribute BindableAttribute(true) */
public DataTemplateSelector get_ContentTemplateSelector()
/** @property */
/** @attribute BindableAttribute(true) */
public  void set_ContentTemplateSelector(DataTemplateSelector value)

public function get ContentTemplateSelector () : DataTemplateSelector
public function set ContentTemplateSelector (value : DataTemplateSelector)
<object>
  <object.ContentTemplateSelector>
    <DataTemplateSelector .../>
  </object.ContentTemplateSelector>
</object>
<object ContentTemplateSelector="{ResourceExtension TemplateSelectorKey}"/>
ResourceExtension
                    템플릿 리소스를 참조하는 방법을 식별하는 태그 확장으로, StaticResource 또는 DynamicResource입니다. 리소스 개요를 참조하십시오.
                TemplateSelectorKey
                    요청된 템플릿 선택기를 식별하는 키입니다. 이 키는 ResourceDictionary의 기존 리소스를 참조합니다.
                

속성 값

형식: System.Windows.Controls.DataTemplateSelector

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

식별자 필드

ContentTemplateSelectorProperty

true로 설정된 메타데이터 속성

없음

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

템플릿 선택기를 만들려면 DataTemplateSelector에서 상속되는 클래스를 만든 다음 SelectTemplate 메서드를 재정의합니다. 클래스를 정의한 후에 해당 클래스의 인스턴스를 요소의 템플릿 선택기 속성에 할당하면 됩니다.

ContentTemplateSelectorContentTemplate 속성이 모두 설정된 경우 이 속성은 무시됩니다.

다음 예제에서는 ContentTemplateSelector 속성을 사용하는 방법을 보여 줍니다. 이 예제에서는 ComboBox의 선택한 항목을 ContentControl에서 상속을 받는 LabelContent 속성에 바인딩합니다. 사용자가 5보다 작은 값을 선택하면 선택한 항목의 값이 Label의 빈 정사각형에 나타납니다. 사용자가 5 이상의 값을 선택하면 해당 값이 녹색 타원에 나타납니다. 이 예제에서는 두 DataTemplate 개체와 ContentTemplateSelector 속성으로 설정되는 DataTemplateSelector를 만들어 이 작업을 수행하고 선택한 항목의 값에 따라 적절한 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:NumderDataTemplateSelector x:Key="numberTemplateSelector"/>

</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 NumderDataTemplateSelector : DataTemplateSelector
{
    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        string numberStr = item as string;

        if (numberStr != null)
        {
            int num;
            Window win = Application.Current.MainWindow;

            try
            {
                num = Convert.ToInt32(numberStr);
            }
            catch
            {
                return null;
            }

            // Select one of the DataTemplate objects, based on the 
            // value of the selected item in the ComboBox.
            if (num < 5)
            {
                return win.FindResource("numberTemplate") as DataTemplate;
            }
            else
            {
                return win.FindResource("largeNumberTemplate") as DataTemplate;

            }
        }

        return null;
    }

}


Windows Vista

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

.NET Framework

3.5, 3.0에서 지원
이 정보가 도움이 되었습니까?
(1500자 남음)

커뮤니티 추가 항목

추가
© 2013 Microsoft. All rights reserved.