ContentControl.ContentTemplateSelector プロパティ

定義

アプリケーション作成者がテンプレートを選択するためのカスタム ロジックを提供できるようにするテンプレート セレクターを取得または設定します。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; }
[<System.ComponentModel.Bindable(true)>]
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector

プロパティ値

DataTemplateSelector

データ テンプレート セレクター。A data template selector. 既定値は null です。The default value is null.

属性

ContentTemplateSelector プロパティを使用する方法を次の例に示します。The following example shows how to use the ContentTemplateSelector property. この例では、内の選択した項目 ComboBox をのプロパティにバインドし Content ます。このプロパティは、から継承され 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. この例では、2つのオブジェクトとを作成し 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. その場合、を作成する必要はありません DataTemplateSelectorIf 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 または) DynamicResourceA 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

適用対象