ContentControl.ContentTemplateSelector 屬性

定義

取得或設定一個樣板選取器,讓應用程式撰寫者可以提供自訂的樣板選取邏輯。

C#
[System.ComponentModel.Bindable(true)]
public System.Windows.Controls.DataTemplateSelector ContentTemplateSelector { get; set; }

屬性值

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

屬性

範例

下列範例將示範如何使用 ContentTemplateSelector 屬性。 這個範例會將 中 ComboBox 選取的專案系結至 Content 繼承自 ContentControlLabel 屬性。 當使用者選取低於 5 的值時,選取專案的值會出現在 中的 Label 黑色方塊中。 當使用者選取 5 或更新版本的值時,此值會顯示在綠色省略號中。 此範例會藉由建立兩 DataTemplate 個 物件和 一個 DataTemplateSelector 來完成此作業,這個物件會設定為 ContentTemplateSelector 屬性,並根據選取專案的值選擇適當的 DataTemplate

XAML
<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>
C#
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;
        }
    }
}

備註

一般而言, 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

適用於

產品 版本
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9