ContentControl.ContentTemplateSelector Eigenschaft

Definition

Ruft eine Vorlagenauswahl ab, mit der Anwendungsentwickler Auswahllogik für benutzerdefinierte Vorlagen bereitstellen können, oder legt diese fest.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; }
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector

Eigenschaftswert

Eine Datenvorlagenauswahl.A data template selector. Der Standardwert ist nullsein.The default value is null.

Attribute

Beispiele

Im folgenden Beispiel wird die Verwendung der ContentTemplateSelector-Eigenschaft veranschaulicht.The following example shows how to use the ContentTemplateSelector property. In diesem Beispiel ComboBox Labelwird das ausgewählte Element in einem an Content die-Eigenschaft eines gebunden, das von ContentControlerbt.This example binds the selected item in a ComboBox to the Content property of a Label, which inherits from ContentControl. Wenn der Benutzer einen Wert unter 5 auswählt, wird der Wert des ausgewählten Elements in einem schwarzen Quadrat in der Labelangezeigt.When the user selects a value below 5, the value of the selected item appears in a black square in the Label. Wenn der Benutzer einen Wert von 5 oder höher auswählt, wird der Wert in einer grünen Ellipse angezeigt.When the user selects a value that is 5 or above, the value appears in a green ellipse. Im Beispiel wird dies erreicht, indem zwei DataTemplate -Objekte erstellt DataTemplateSelectorwerden, und ein-Objekt ContentTemplateSelector , das auf die- DataTemplate Eigenschaft festgelegt ist, und das entsprechende auf der Grundlage des Werts des ausgewählten Elements auswählt.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

Hinweise

In der Regel erstellen Sie DataTemplateSelector einen, wenn Sie mehr als DataTemplate einen für denselben Objekttyp haben, und Sie möchten eine eigene Logik bereitstellen DataTemplate , um eine für die Anwendung basierend auf den Eigenschaften der einzelnen Datenobjekte auszuwählen.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. Beachten Sie, dass Sie die DataType -Eigenschaft DataTemplateim festlegen können, wenn Sie über Objekte mit unterschiedlichen Typen verfügen.Note that if you have objects of different types you can set the DataType property on the DataTemplate. Wenn Sie dies tun, ist es nicht erforderlich, eine DataTemplateSelectorzu erstellen.If you do that, then there is no need to create a DataTemplateSelector. Wenn Sie über Objekte desselben Typs, aber mit unterschiedlichen Eigenschaften verfügen, können Sie auch die Verwendung eines DataTrigger -oder-Daten Konverters in Erwägung gezogen.Furthermore, if you have objects of the same type but with different properties, you can also consider using a DataTrigger or a data converter. Weitere Informationen finden Sie unter Übersicht über Datenvorlagen.For more information, see Data Templating Overview.

Erstellen Sie eine Klasse, die von DataTemplateSelector erbt, und überschreiben Sie die SelectTemplate -Methode, um eine Vorlagen Auswahl zu erstellen.To create a template selector, create a class that inherits from DataTemplateSelector and override the SelectTemplate method. Nachdem die Klasse definiert wurde, können Sie der Template Selector-Eigenschaft des Elements eine Instanz der-Klasse zuweisen.After your class is defined, you can assign an instance of the class to the template selector property of your element.

Wenn sowohl die ContentTemplateSelector -Eigenschaft ContentTemplate als auch die-Eigenschaft festgelegt sind, wird diese Eigenschaft ignoriert.If both the ContentTemplateSelector and the ContentTemplate properties are set, then this property is ignored.

Verwendung von XAML-AttributenXAML Attribute Usage

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

XAML-WerteXAML Values

ResourceExtensionResourceExtension
Eine Markup Erweiterung, die angibt, wie auf die Vorlagen Ressource verwiesen StaticResource wird DynamicResource, entweder oder.A markup extension that identifies how to reference the template resource, either StaticResource or DynamicResource. Siehe XAML-Ressourcen.See XAML Resources.

TemplateSelectorKeyTemplateSelectorKey
Der Schlüssel, der die angeforderte Vorlagen Auswahl identifiziert.The key that identifies the requested template selector. Der Schlüssel verweist auf eine vorhandene Ressource in einer ResourceDictionary.The key refers to an existing resource in a ResourceDictionary.

Informationen zur AbhängigkeitseigenschaftDependency Property Information

BezeichnerfeldIdentifier field ContentTemplateSelectorProperty
Metadateneigenschaften auf true festgelegtMetadata properties set to true KeineNone

Gilt für: