Compartilhar via


ContentControl.ContentTemplateSelector Propriedade

Definição

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

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 da propriedade

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 um ComboBox à Content propriedade de um Label, que herda de ContentControl. 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 elipse 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.

<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

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 aplicação 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 conversor de dados ou um conversor de dados. Para obter mais informações, consulte 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 do seletor de modelo do elemento.

Se as propriedades e as ContentTemplateSelectorContentTemplate 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 StaticResourceDynamicResource. 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 Dependency

Item Valor
Campo identificador ContentTemplateSelectorProperty
Propriedades de metadados definidas como true Nenhum

Aplica-se a