Bagikan melalui


ContentControl.ContentTemplateSelector Properti

Definisi

Mendapatkan atau mengatur pemilih templat yang memungkinkan penulis aplikasi menyediakan logika pemilihan templat kustom.

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

Nilai Properti

Pemilih templat data. Nilai defaultnya adalah null.

Atribut

Contoh

Contoh berikut menunjukkan cara menggunakan ContentTemplateSelector properti . Contoh ini mengikat item yang dipilih dalam ke ComboBoxContent properti Label, yang mewarisi dari ContentControl. Saat pengguna memilih nilai di bawah 5, nilai item yang dipilih muncul dalam kotak hitam di Label. Saat pengguna memilih nilai 5 atau lebih tinggi, nilai muncul dalam elips hijau. Contoh menyelesaikan ini dengan membuat dua DataTemplate objek dan DataTemplateSelector, yang diatur ke ContentTemplateSelector properti dan memilih yang sesuai DataTemplate berdasarkan nilai item yang dipilih.

<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

Keterangan

Biasanya, Anda membuat DataTemplateSelector ketika Anda memiliki lebih dari satu DataTemplate untuk jenis objek yang sama dan Anda ingin menyediakan logika Anda sendiri untuk memilih DataTemplate untuk diterapkan berdasarkan properti setiap objek data. Perhatikan bahwa jika Anda memiliki objek dari berbagai jenis, Anda dapat mengatur DataType properti pada DataTemplate. Jika Anda melakukan itu, maka tidak perlu membuat DataTemplateSelector. Selain itu, jika Anda memiliki objek dengan jenis yang sama tetapi dengan properti yang berbeda, Anda juga dapat mempertimbangkan untuk menggunakan DataTrigger atau pengonversi data. Untuk informasi selengkapnya, lihat Gambaran Umum Templat Data.

Untuk membuat pemilih templat, buat kelas yang mewarisi dan DataTemplateSelector mengambil alih SelectTemplate metode . Setelah kelas ditentukan, Anda dapat menetapkan instans kelas ke properti pemilih templat elemen Anda.

ContentTemplateSelector Jika properti dan ContentTemplate diatur, maka properti ini diabaikan.

Penggunaan Atribut XAML

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

Nilai XAML

ResourceExtension Ekstensi markup yang mengidentifikasi cara mereferensikan sumber daya templat, baik StaticResource atau DynamicResource. Lihat Sumber Daya XAML.

TemplateSelectorKey Kunci yang mengidentifikasi pemilih templat yang diminta. Kunci mengacu pada sumber daya yang ada dalam ResourceDictionary.

Informasi Properti Dependensi

Item Nilai
Bidang pengidentifikasi ContentTemplateSelectorProperty
Properti metadata diatur ke true Tidak

Berlaku untuk