ContentControl.ContentTemplateSelector Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 StaticResource
DynamicResource
. 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 |