ContentControl.ContentTemplateSelector Propriedade

Definição

Obtém ou define um seletor de modelo que permite que um gravador de aplicativos forneça a lógica de seleção de modelo personalizada.

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

Valor da propriedade

DataTemplateSelector

Um seletor de modelo de dados. O valor padrão é null.

Atributos

Exemplos

O exemplo a seguir mostra como usar a ContentTemplateSelector propriedade. Este exemplo associa o item selecionado em uma ComboBox propriedade de um Label, que herda de ContentControlContent . Quando o usuário seleciona um valor abaixo de 5, o valor do item selecionado aparece em um quadrado preto no Label. Quando o usuário seleciona um valor 5 ou superior, o valor aparece em uma reticência verde. O exemplo faz isso criando dois DataTemplate objetos e um DataTemplateSelector, que é definido como a ContentTemplateSelector propriedade e escolhe o apropriado DataTemplate com base no valor do item selecionado.

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;
        }
    }
}

Comentários

Normalmente, você cria um DataTemplateSelector quando tem mais de um DataTemplate para o mesmo tipo de objetos e deseja fornecer sua própria lógica para escolher uma DataTemplate a ser aplicada com base nas propriedades de cada objeto de dados. Observe que, se você tiver objetos de diferentes tipos, poderá definir a DataType propriedade no DataTemplate. Se você fizer isso, não será necessário criar um DataTemplateSelector. Além disso, se você tiver objetos do mesmo tipo, mas com propriedades diferentes, também poderá considerar o uso de um DataTrigger ou um conversor de dados. Para obter mais informações, consulte a Visão geral da Modelagem de Dados.

Para criar um seletor de modelo, crie uma classe que herda DataTemplateSelector e substitua o SelectTemplate método. Depois que sua classe for definida, você poderá atribuir uma instância da classe à propriedade seletor de modelo do elemento.

Se as propriedades e ContentTemplate as ContentTemplateSelector propriedades estiverem definidas, essa propriedade será ignorada.

Uso do Atributo XAML

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

Valores XAML

ResourceExtension
Uma extensão de marcação que identifica como referenciar o recurso de modelo ou StaticResource DynamicResource. Consulte recursos XAML.

TemplateSelectorKey
A chave que identifica o seletor de modelo solicitado. A chave refere-se a um recurso existente em um ResourceDictionary.

Informações da propriedade de dependência

Campo Identificador ContentTemplateSelectorProperty
Propriedades de metadados definidas como true Nenhum

Aplica-se a

Produto Versões
.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