ContentControl.ContentTemplateSelector Propiedad

Definición

Obtiene o establece un selector de plantillas que permite a los autores de aplicaciones proporcionar una lógica de selección de plantillas personalizada.

C#
[System.ComponentModel.Bindable(true)]
public System.Windows.Controls.DataTemplateSelector ContentTemplateSelector { get; set; }

Valor de propiedad

DataTemplateSelector

Selector de plantillas de datos. El valor predeterminado es null.

Atributos

Ejemplos

En el ejemplo siguiente se muestra cómo usar la propiedad ContentTemplateSelector. En este ejemplo se enlaza el elemento seleccionado de a ComboBox la Content propiedad de , Labelque hereda de ContentControl. Cuando el usuario selecciona un valor por debajo de 5, el valor del elemento seleccionado aparece en un cuadrado negro en .Label Cuando el usuario selecciona un valor que es 5 o superior, el valor aparece en una elipse verde. El ejemplo lo logra creando dos DataTemplate objetos y un DataTemplateSelector, que se establece en la ContentTemplateSelector propiedad y elige el adecuado DataTemplate en función del valor del elemento seleccionado.

XAML
<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>
C#
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;
        }
    }
}

Comentarios

Normalmente, se crea un DataTemplateSelector cuando se tiene más de uno DataTemplate para el mismo tipo de objetos y se desea proporcionar su propia lógica para elegir un DataTemplate objeto que se aplique en función de las propiedades de cada objeto de datos. Tenga en cuenta que si tiene objetos de diferentes tipos, puede establecer la DataType propiedad en .DataTemplate Si lo hace, no es necesario crear un DataTemplateSelector. Además, si tiene objetos del mismo tipo pero con propiedades diferentes, también puede considerar el uso de un DataTrigger convertidor de datos o . Para más información, consulte Información general sobre plantillas de datos.

Para crear un selector de plantillas, cree una clase que herede de DataTemplateSelector e invalide el SelectTemplate método . Una vez definida la clase, puede asignar una instancia de la clase a la propiedad del selector de plantillas del elemento.

Si se establecen las ContentTemplateSelector propiedades y ContentTemplate , se omite esta propiedad.

Uso de atributos XAML

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

Valores XAML

ResourceExtension
Extensión de marcado que identifica cómo hacer referencia al recurso de plantilla, ya sea StaticResource o DynamicResource. Consulta Recursos XAML.

TemplateSelectorKey
Clave que identifica el selector de plantillas solicitado. La clave hace referencia a un recurso existente en .ResourceDictionary

Información sobre propiedades de dependencia

Campo identificador ContentTemplateSelectorProperty
Propiedades de metadatos establecidas en true Ninguno

Se aplica a

Producto Versiones
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
Windows Desktop 3.0, 3.1, 5, 6, 7