ContentControl.ContentTemplateSelector Propriedade

Definição

Obtém ou define um seletor de modelos que permite a um programador de aplicações fornecer uma lógica personalizada de seleção de modelos.

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

Valor de Propriedade

Um seletor de modelos de dados. O valor predefinido é null.

Atributos

Exemplos

O exemplo seguinte mostra como utilizar a ContentTemplateSelector propriedade. Este exemplo liga o item selecionado em a ComboBox à Content propriedade de um Label, que herda de ContentControl. Quando o utilizador seleciona um valor abaixo de 5, o valor do item selecionado aparece num quadrado preto no Labelarquivo . Quando o utilizador seleciona um valor que seja 5 ou superior, o valor aparece numa elipse verde. O exemplo consegue isto criando dois DataTemplate objetos e um DataTemplateSelector, que é definido para a ContentTemplateSelector propriedade e escolhe o apropriado DataTemplate com base no valor do item selecionado.

<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

Observações

Normalmente, cria-se um DataTemplateSelector quando tem mais do que um DataTemplate para o mesmo tipo de objetos e quer fornecer a sua própria lógica para escolher a DataTemplate aplicar com base nas propriedades de cada objeto de dados. Note que, se tiver objetos de diferentes tipos, pode definir a DataType propriedade no DataTemplate. Se fizeres isso, então não há necessidade de criar um DataTemplateSelector. Além disso, se tiver objetos do mesmo tipo mas com propriedades diferentes, pode também considerar usar um DataTrigger ou um conversor de dados. Para mais informações, consulte Visão Geral da Templação de Dados.

Para criar um seletor de templates, crie uma classe que herde e DataTemplateSelector sobreponha o SelectTemplate método. Depois de a sua classe estar definida, pode atribuir uma instância da classe à propriedade do seletor de template do seu elemento.

Se tanto as ContentTemplateSelector propriedades como as ContentTemplate estiverem definidas, então esta propriedade é ignorada.

Uso de atributos XAML

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

Valores XAML

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

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

Informação de Propriedade de Dependência

Número Value
Campo identificador ContentTemplateSelectorProperty
Propriedades dos metadados definidas como true None

Aplica-se a