Freigeben über


ContentControl.ContentTemplateSelector Eigenschaft

Definition

Dient zum Abrufen oder Festlegen einer Vorlagenauswahl, die es einem Anwendungsautor ermöglicht, benutzerdefinierte Vorlagenauswahllogik bereitzustellen.

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

Eigenschaftswert

Eine Datenvorlagenauswahl. Der Standardwert ist null.

Attribute

Beispiele

Das folgende Beispiel zeigt, wie die ContentTemplateSelector Eigenschaft verwendet wird. In diesem Beispiel wird das ausgewählte Element in einer ComboBox an die Content Eigenschaft eines Label, die von ContentControl. Wenn der Benutzer einen Wert unter 5 auswählt, wird der Wert des ausgewählten Elements in einem schwarzen Quadrat in der Label. Wenn der Benutzer einen Wert auswählt, der 5 oder höher ist, wird der Wert in einer grünen Ellipse angezeigt. Im Beispiel wird dies erreicht, indem zwei DataTemplate Objekte und ein DataTemplateSelectorObjekt erstellt werden, das auf die ContentTemplateSelector Eigenschaft festgelegt ist und basierend auf dem Wert des ausgewählten Elements die entsprechende DataTemplate Option auswählt.

<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 eine DataTemplateSelector , wenn Sie mehrere DataTemplate Objekte für denselben Objekttyp haben und ihre eigene Logik angeben möchten, um eine DataTemplate Anwendung basierend auf den Eigenschaften der einzelnen Datenobjekte auszuwählen. Beachten Sie, dass Sie, wenn Sie Objekte mit unterschiedlichen Typen haben, die DataType Eigenschaft für die DataTemplate. Wenn Sie dies tun, ist es nicht erforderlich, eine DataTemplateSelector. Darüber hinaus können Sie bei Objekten desselben Typs, aber mit unterschiedlichen Eigenschaften auch die Verwendung eines DataTrigger Datenkonverters in Betracht ziehen. Weitere Informationen finden Sie unter Data Templating Overview.

Um eine Vorlagenauswahl zu erstellen, erstellen Sie eine Klasse, die von DataTemplateSelector der SelectTemplate Methode erbt und sie überschreibt. Nachdem Ihre Klasse definiert wurde, können Sie der Vorlagenauswahleigenschaft des Elements eine Instanz der Klasse zuweisen.

Wenn sowohl die ContentTemplateSelector Eigenschaften als auch die ContentTemplate Eigenschaften festgelegt werden, wird diese Eigenschaft ignoriert.

Verwendung von XAML-Attributen

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

XAML-Werte

ResourceExtension Eine Markuperweiterung, die angibt, wie auf die Vorlagenressource verwiesen wird, entweder StaticResource oder DynamicResource. Siehe XAML-Ressourcen.

TemplateSelectorKey Der Schlüssel, der die angeforderte Vorlagenauswahl identifiziert. Der Schlüssel bezieht sich auf eine vorhandene Ressource in einer ResourceDictionary.

Informationen zur Abhängigkeitseigenschaft

Element Wert
Bezeichnerfeld ContentTemplateSelectorProperty
Auf Metadateneigenschaften festgelegt true Nichts

Gilt für: