Sdílet prostřednictvím


ContentControl.ContentTemplateSelector Vlastnost

Definice

Získá nebo nastaví selektor šablony, který umožňuje zapisovači 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

Výběr š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 v objektu ComboBoxContent s vlastností Label, která dědí z ContentControl. Když uživatel vybere hodnotu nižší než 5, zobrazí se hodnota vybrané položky v černém čtverci v objektu Label. Když uživatel vybere hodnotu 5 nebo vyšší, zobrazí se tato hodnota v zelené elipse. Příklad toho dosáhne vytvořením dvou DataTemplate objektů a objektu DataTemplateSelector, který je nastaven na ContentTemplateSelector vlastnost a vybere odpovídající DataTemplate objekt 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 se vytváří DataTemplateSelector , když máte více než jeden DataTemplate pro stejný typ objektů a chcete zadat vlastní logiku pro volbu DataTemplate , která se použije 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 nastavit DataType vlastnost v objektu DataTemplate. Pokud to uděláte, není potřeba vytvářet DataTemplateSelector. Pokud máte objekty stejného typu, ale s různými vlastnostmi, můžete také zvážit použití DataTrigger převaděče dat nebo . Další informace najdete v tématu Přehled šablon dat.

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

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

Použití atributu XAML

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

Hodnoty XAML

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

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

Informace o vlastnosti závislosti

Pole Identifikátor ContentTemplateSelectorProperty
Vlastnosti metadat nastavené na true Žádné

Platí pro