ContentControl.ContentTemplateSelector Eigenschaft

Definition

Ruft eine Vorlagenauswahl ab, mit der Anwendungsentwickler Auswahllogik für benutzerdefinierte Vorlagen bereitstellen können, oder legt diese fest.

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

Im folgenden Beispiel wird die Verwendung der ContentTemplateSelector-Eigenschaft veranschaulicht. In diesem Beispiel wird das ausgewählte Element in einem ComboBox an die Content -Eigenschaft von Labelgebunden, die von ContentControlerbt. Wenn der Benutzer einen Wert unter 5 auswählt, wird der Wert des ausgewählten Elements in einem schwarzen Quadrat im Labelangezeigt. 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 DataTemplateSelector-Objekt erstellt werden, das auf die ContentTemplateSelector -Eigenschaft festgelegt ist und das entsprechende DataTemplate basierend auf dem Wert des ausgewählten Elements 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 über mehrere DataTemplate Objekte für denselben Objekttyp verfügen und Ihre eigene Logik bereitstellen möchten, um basierend auf den Eigenschaften jedes Datenobjekts eine DataTemplate auszuwählen, die angewendet werden soll. Beachten Sie, dass Sie die -Eigenschaft DataTemplatefür festlegen können, wenn Sie über Objekte unterschiedlicher Typen verfügenDataType. Wenn Sie dies tun, ist es nicht erforderlich, eine DataTemplateSelectorzu erstellen. Wenn Sie über Objekte desselben Typs, aber mit unterschiedlichen Eigenschaften verfügen, können Sie auch die Verwendung eines DataTrigger oder eines Datenkonverters in Betracht ziehen. Weitere Informationen finden Sie unter Übersicht über Datenvorlagen.

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

Wenn sowohl die ContentTemplateSelector -Eigenschaft als auch die ContentTemplate -Eigenschaft festgelegt sind, 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. Weitere Informationen finden Sie unter XAML-Ressourcen.

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

Informationen zur Abhängigkeitseigenschaft

Bezeichnerfeld ContentTemplateSelectorProperty
Metadateneigenschaften auf true festgelegt Keine

Gilt für: