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

屬性值

資料範本選取器。 預設值是 null

屬性

範例

下列範例將示範如何使用 ContentTemplateSelector 屬性。 這個範例會將 中 ComboBox 選取的專案系結至 Content 繼承自 ContentControlLabel 屬性。 當使用者選取低於 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 用 。 請注意,如果您有不同類型的物件,您可以在 上 DataTemplate 設定 DataType 屬性。 如果您這樣做,則不需要建立 DataTemplateSelector 。 此外,如果您有相同類型但具有不同屬性的物件,您也可以考慮使用 DataTrigger 或 資料轉換器。 如需詳細資訊,請參閱 資料範本化概觀

若要建立範本選取器,請建立繼承自 DataTemplateSelector 的類別,並覆寫 SelectTemplate 方法。 定義類別之後,您可以將 類別的實例指派給元素的樣板選取器屬性。

ContentTemplateSelector如果 同時設定 和 ContentTemplate 屬性,則會忽略此屬性。

XAML Attribute Usage

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

XAML 值

ResourceExtension
標記延伸,識別如何參考範本資源,或 StaticResourceDynamicResource 。 請參閱 XAML 資源

TemplateSelectorKey
識別要求之範本選取器的索引鍵。 索引鍵是指 中的 ResourceDictionary 現有資源。

相依性屬性資訊

識別碼欄位 ContentTemplateSelectorProperty
設定為 的中繼資料屬性 true

適用於