ContentControl.ContentTemplateSelector Proprietà

Definizione

Ottiene o imposta un selettore del modello che consente a un writer dell'applicazione di fornire la logica di selezione del modello personalizzata.

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

Valore della proprietà

Un selettore di modello di dati. Il valore predefinito è null.

Attributi

Esempio

Nell'esempio seguente viene illustrato come utilizzare la proprietà ContentTemplateSelector. In questo esempio l'elemento selezionato viene ComboBox associato alla Content proprietà di un Labeloggetto , che eredita da ContentControl. Quando l'utente seleziona un valore inferiore a 5, il valore dell'elemento selezionato viene visualizzato in un quadrato nero in Label. Quando l'utente seleziona un valore pari a 5 o superiore, il valore viene visualizzato in un'ellisse verde. L'esempio esegue questa operazione creando due DataTemplate oggetti e un DataTemplateSelectoroggetto , che viene impostato sulla ContentTemplateSelector proprietà e sceglie l'oggetto appropriato DataTemplate in base al valore dell'elemento selezionato.

<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

Commenti

In genere, si crea un DataTemplateSelector oggetto quando si dispone di più oggetti DataTemplate per lo stesso tipo di oggetti e si vuole fornire una logica personalizzata per scegliere un DataTemplate oggetto da applicare in base alle proprietà di ogni oggetto dati. Si noti che se si dispone di oggetti di tipi diversi, è possibile impostare la DataType proprietà su DataTemplate. In questo caso, non è necessario creare un oggetto DataTemplateSelector. Inoltre, se si dispone di oggetti dello stesso tipo ma con proprietà diverse, è anche possibile prendere in considerazione l'uso di un DataTrigger convertitore di dati o . Per altre informazioni, vedere Cenni preliminari sulla creazione di modelli di dati.

Per creare un selettore di modello, creare una classe che eredita da DataTemplateSelector ed eseguire l'override del SelectTemplate metodo . Dopo aver definito la classe, è possibile assegnare un'istanza della classe alla proprietà del selettore del modello dell'elemento.

Se vengono impostate entrambe le ContentTemplateSelector proprietà e ContentTemplate , questa proprietà viene ignorata.

Uso della sintassi XAML per gli attributi

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

Valori XAML

ResourceExtension
Estensione di markup che identifica come fare riferimento alla risorsa modello, StaticResource o DynamicResource. Vedi Risorse XAML.

TemplateSelectorKey
Chiave che identifica il selettore del modello richiesto. La chiave fa riferimento a una risorsa esistente in un oggetto ResourceDictionary.

Informazioni proprietà di dipendenza

Campo Identificatore ContentTemplateSelectorProperty
Proprietà dei metadati impostate su true Nessuno

Si applica a