ContentControl.ContentTemplateSelector ContentControl.ContentTemplateSelector ContentControl.ContentTemplateSelector ContentControl.ContentTemplateSelector Property

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.Gets or sets a template selector that enables an application writer to provide custom template-selection logic.

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; }
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector

Valor de propiedad

Selector de plantillas de datos.A data template selector. El valor predeterminado es null.The default value is null.

Ejemplos

En el ejemplo siguiente se muestra cómo usar la propiedad ContentTemplateSelector.The following example shows how to use the ContentTemplateSelector property. En este ejemplo se enlaza el elemento seleccionado de ComboBox a la Content propiedad de Label, que hereda de ContentControl.This example binds the selected item in a ComboBox to the Content property of a Label, which inherits from ContentControl. Cuando el usuario selecciona un valor por debajo de 5, el valor del elemento seleccionado aparece en un cuadrado negro en Label.When the user selects a value below 5, the value of the selected item appears in a black square in the Label. Cuando el usuario selecciona un valor que es 5 o superior, el valor aparece en una elipse verde.When the user selects a value that is 5 or above, the value appears in a green ellipse. Para ello DataTemplate , se crean dos objetos y un DataTemplateSelectorobjeto, que se establece en la ContentTemplateSelector propiedad y elige el correspondiente DataTemplate en función del valor del elemento seleccionado.The example accomplishes this by creating two DataTemplate objects and a DataTemplateSelector, which is set to the ContentTemplateSelector property and chooses the appropriate DataTemplate based on the value of the selected item.

<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 'NumderDataTemplateSelector 

Comentarios

Normalmente, se crea una DataTemplateSelector cuando se tiene más de una DataTemplate para el mismo tipo de objetos y se desea proporcionar su DataTemplate propia lógica para elegir la que se va a aplicar en función de las propiedades de cada objeto de datos.Typically, you create a DataTemplateSelector when you have more than one DataTemplate for the same type of objects and you want to supply your own logic to choose a DataTemplate to apply based on the properties of each data object. DataType TengaDataTemplateen cuenta que si tiene objetos de tipos diferentes, puede establecer la propiedad en.Note that if you have objects of different types you can set the DataType property on the DataTemplate. Si lo hace, no es necesario crear un DataTemplateSelector.If you do that, then there is no need to create a DataTemplateSelector. Además, si tiene objetos del mismo tipo pero con propiedades diferentes, también puede usar un DataTrigger convertidor de datos o.Furthermore, if you have objects of the same type but with different properties, you can also consider using a DataTrigger or a data converter. Para obtener más información, consulte Información general sobre plantillas de datos.For more information, see Data Templating Overview.

Para crear un selector de plantilla, cree una clase que herede de DataTemplateSelector e invalide el SelectTemplate método.To create a template selector, create a class that inherits from DataTemplateSelector and override the SelectTemplate method. Una vez definida la clase, puede asignar una instancia de la clase a la propiedad del selector de plantilla del elemento.After your class is defined, you can assign an instance of the class to the template selector property of your element.

Si se establecen ContentTemplateSelector las ContentTemplate propiedades y, se omite esta propiedad.If both the ContentTemplateSelector and the ContentTemplate properties are set, then this property is ignored.

Uso de atributos XAMLXAML Attribute Usage

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

Valores XAMLXAML Values

ResourceExtensionResourceExtension
Extensión de marcado que identifica cómo hacer referencia al recurso de plantilla, StaticResource ya DynamicResourcesea o.A markup extension that identifies how to reference the template resource, either StaticResource or DynamicResource. Vea recursos XAML.See XAML Resources.

TemplateSelectorKeyTemplateSelectorKey
Clave que identifica el selector de plantillas solicitado.The key that identifies the requested template selector. La clave hace referencia a un recurso existente en ResourceDictionaryun.The key refers to an existing resource in a ResourceDictionary.

Información sobre propiedades de dependenciaDependency Property Information

Campo de identificadorIdentifier field ContentTemplateSelectorProperty
Propiedades de metadatos establecidas entrueMetadata properties set to true NingunaNone

Se aplica a