ContentControl.ContentTemplateSelector Właściwość

Definicja

Pobiera lub ustawia selektor szablonu, który umożliwia modułowi zapisywania aplikacji udostępnianie niestandardowej logiki wyboru szablonu.

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

Wartość właściwości

DataTemplateSelector

Selektor szablonu danych. Wartość domyślna to null.

Atrybuty

Przykłady

W poniższym przykładzie pokazano, jak używać ContentTemplateSelector właściwości. W tym przykładzie zaznaczony element jest powiązany z ComboBox Content właściwością Labelobiektu , która dziedziczy z ContentControlklasy . Gdy użytkownik wybierze wartość poniżej 5, wartość wybranego elementu pojawi się w czarnym kwadratzie w elemencie Label. Gdy użytkownik wybierze wartość 5 lub nowszą, zostanie wyświetlona w zielonym wielokropce. W tym przykładzie można to osiągnąć, tworząc dwa DataTemplate obiekty i DataTemplateSelectorelement , który jest ustawiony na ContentTemplateSelector właściwość i wybiera odpowiednie DataTemplate na podstawie wartości wybranego elementu.

<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

Uwagi

Zazwyczaj tworzy się obiekt DataTemplateSelector , jeśli masz więcej niż jeden DataTemplate dla tego samego typu obiektów i chcesz podać własną logikę, aby wybrać DataTemplate obiekt do zastosowania na podstawie właściwości każdego obiektu danych. Należy pamiętać, że jeśli masz obiekty różnych typów, możesz ustawić DataType właściwość w obiekcie DataTemplate. Jeśli to zrobisz, nie ma potrzeby tworzenia elementu DataTemplateSelector. Ponadto, jeśli masz obiekty tego samego typu, ale z różnymi właściwościami, możesz również rozważyć użycie konwertera DataTrigger danych lub . Aby uzyskać więcej informacji, zobacz Omówienie tworzenia szablonów danych.

Aby utworzyć selektor szablonu, utwórz klasę dziedziczą po DataTemplateSelector metodzie i przesłaniają SelectTemplate ją. Po zdefiniowaniu klasy można przypisać wystąpienie klasy do właściwości selektora szablonu elementu.

Jeśli właściwości ContentTemplateSelector i są ContentTemplate ustawione, ta właściwość jest ignorowana.

Użycie atrybutu języka XAML

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

Wartości XAML

Rozszerzenie zasobu
Rozszerzenie znaczników identyfikujące sposób odwołowania się do zasobu szablonu lub StaticResource DynamicResource. Zobacz Zasoby XAML.

TemplateSelectorKey
Klucz identyfikujący żądany selektor szablonu. Klucz odwołuje się do istniejącego zasobu w obiekcie ResourceDictionary.

Informacje dotyczące właściwości zależności

Pole identyfikatora ContentTemplateSelectorProperty
Właściwości metadanych ustawione na true Brak

Dotyczy