Sdílet prostřednictvím


ContentControl.ContentTemplateSelector Vlastnost

Definice

Získá nebo nastaví selektor šablony, který umožňuje zapisovač aplikace poskytnout vlastní logiku výběru šablony.

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

Hodnota vlastnosti

Selektor šablony dat Výchozí hodnota je null.

Atributy

Příklady

Následující příklad ukazuje, jak použít ContentTemplateSelector vlastnost. Tento příklad sváže vybranou položku ve vlastnosti ComboBoxContentLabel, která dědí z ContentControl. Když uživatel vybere hodnotu nižší než 5, zobrazí se hodnota vybrané položky v černém čtverci v sadě Label. Když uživatel vybere hodnotu, která je 5 nebo vyšší, zobrazí se tato hodnota zeleně se třemi tečkami. Příklad toho dosáhne vytvořením dvou DataTemplate objektů a objektu DataTemplateSelector, který je nastaven na ContentTemplateSelector vlastnost a zvolí odpovídající DataTemplate na základě hodnoty vybrané položky.

<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

Poznámky

Obvykle vytvoříte DataTemplateSelector , když máte více než jeden DataTemplate pro stejný typ objektů a chcete zadat vlastní logiku, která DataTemplate se má použít na základě vlastností každého datového objektu. Všimněte si, že pokud máte objekty různých typů, můžete vlastnost nastavit DataType na DataTemplate. Pokud to uděláte, není nutné vytvořit DataTemplateSelector. Kromě toho, pokud máte objekty stejného typu, ale s různými vlastnostmi, můžete také zvážit použití DataTrigger nebo převaděč dat. Další informace najdete v tématu Přehled šablon dat.

Chcete-li vytvořit selektor šablony, vytvořte třídu, která dědí z DataTemplateSelector metody a přepíše metodu SelectTemplate . Po definování třídy můžete přiřadit instanci třídy k vlastnosti selektoru šablony prvku.

Pokud jsou nastaveny ContentTemplateSelector vlastnosti i ContentTemplate vlastnosti, bude tato vlastnost ignorována.

Použití atributu XAML

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

Hodnoty XAML

ResourceExtension Rozšíření značek, které identifikuje, jak odkazovat na prostředek šablony, nebo StaticResourceDynamicResource. Viz prostředky XAML.

TemplateSelectorKey Klíč, který identifikuje požadovaný selektor šablony. Klíč odkazuje na existující prostředek v objektu ResourceDictionary.

Informace o vlastnosti závislosti

Položka Hodnota
Pole Identifikátor ContentTemplateSelectorProperty
Vlastnosti metadat nastavené na true None

Platí pro