ContentControl.ContentTemplateSelector Propriété

Définition

Obtient ou définit un sélecteur de modèle qui permet au writer de l'application de fournir une logique de sélection de modèle personnalisée.

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

Valeur de propriété

Sélecteur de modèle de données. La valeur par défaut est null.

Attributs

Exemples

L'exemple suivant indique comment utiliser la propriété ContentTemplateSelector. Cet exemple lie l’élément sélectionné dans un ComboBox à la Content propriété d’un Label, qui hérite de ContentControl. Lorsque l’utilisateur sélectionne une valeur inférieure à 5, la valeur de l’élément sélectionné apparaît dans un carré noir dans le Label. Lorsque l’utilisateur sélectionne une valeur de 5 ou supérieure, la valeur apparaît dans une ellipse verte. Pour ce faire, l’exemple crée deux DataTemplate objets et un DataTemplateSelector, qui est défini sur la ContentTemplateSelector propriété et choisit le approprié DataTemplate en fonction de la valeur de l’élément sélectionné.

<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

Remarques

En règle générale, vous créez un DataTemplateSelector lorsque vous en avez plusieurs DataTemplate pour le même type d’objets et que vous souhaitez fournir votre propre logique pour choisir un DataTemplate à appliquer en fonction des propriétés de chaque objet de données. Notez que si vous avez des objets de types différents, vous pouvez définir la DataType propriété sur le DataTemplate. Si vous procédez ainsi, il n’est pas nécessaire de créer un DataTemplateSelector. En outre, si vous avez des objets du même type mais avec des propriétés différentes, vous pouvez également envisager d’utiliser un DataTrigger convertisseur de données ou . Pour plus d’informations, consultez Vue d’ensemble de la création de modèles de données.

Pour créer un sélecteur de modèle, créez une classe qui hérite de DataTemplateSelector et remplace la SelectTemplate méthode . Une fois votre classe définie, vous pouvez affecter une instance de la classe à la propriété de sélecteur de modèle de votre élément.

Si les ContentTemplateSelector propriétés et sont ContentTemplate définies, cette propriété est ignorée.

Utilisation d'attributs XAML

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

Valeurs XAML

ResourceExtension
Extension de balisage qui identifie comment référencer la ressource de modèle, ou StaticResourceDynamicResource. Consultez Ressources XAML.

TemplateSelectorKey
Clé qui identifie le sélecteur de modèle demandé. La clé fait référence à une ressource existante dans un ResourceDictionary.

Informations sur les propriétés de dépendance

Champ Identificateur ContentTemplateSelectorProperty
Propriétés de métadonnées définies sur true Aucun

S’applique à