ContentControl.ContentTemplateSelector Свойство

Определение

Возвращает или задает элемент выбора шаблона, позволяющий разработчику приложения представить настраиваемую логику выбора шаблона.Gets or sets a template selector that enables an application writer to provide custom template-selection logic.

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; }
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector

Значение свойства

Элемент выбора шаблона данных.A data template selector. Значение по умолчанию — null.The default value is null.

Атрибуты

Примеры

В следующем примере показано, как использовать свойство ContentTemplateSelector.The following example shows how to use the ContentTemplateSelector property. В этом примере выбранный ComboBox элемент привязывается Content к свойству объекта Label, который наследует от ContentControl.This example binds the selected item in a ComboBox to the Content property of a Label, which inherits from ContentControl. Когда пользователь выбирает значение ниже 5, значение выбранного элемента появляется в черном квадрате в Label.When the user selects a value below 5, the value of the selected item appears in a black square in the Label. Когда пользователь выбирает значение 5 или выше, оно отображается зеленым эллипсом.When the user selects a value that is 5 or above, the value appears in a green ellipse. В этом примере это достигается путем создания DataTemplate двух объектов DataTemplateSelectorи, для ContentTemplateSelector которых задается свойство, и выбирается DataTemplate соответствующее значение в зависимости от значения выбранного элемента.The example accomplishes this by creating two DataTemplate objects and a DataTemplateSelector, which is set to the ContentTemplateSelector property and chooses the appropriate DataTemplate based on the value of the selected item.

<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

Комментарии

Как правило, DataTemplateSelector при наличии нескольких DataTemplate объектов одного и того же типа и необходимости предоставления DataTemplate собственной логики для выбора для применения в зависимости от свойств каждого объекта данных.Typically, you create a DataTemplateSelector when you have more than one DataTemplate for the same type of objects and you want to supply your own logic to choose a DataTemplate to apply based on the properties of each data object. Обратите внимание, что при наличии объектов различных типов можно задать DataType свойство DataTemplateв.Note that if you have objects of different types you can set the DataType property on the DataTemplate. В этом случае нет необходимости создавать DataTemplateSelector.If you do that, then there is no need to create a DataTemplateSelector. Более того, если у вас есть объекты одного типа, но с разными свойствами, можно также рассмотреть возможность использования DataTrigger преобразователя данных или.Furthermore, if you have objects of the same type but with different properties, you can also consider using a DataTrigger or a data converter. Более подробную информацию см. в разделе Общие сведения о шаблонах данных.For more information, see Data Templating Overview.

Чтобы создать селектор шаблона, создайте класс, наследующий от DataTemplateSelector и SelectTemplate переопределяющий метод.To create a template selector, create a class that inherits from DataTemplateSelector and override the SelectTemplate method. После определения класса можно назначить экземпляр класса свойству выбора шаблона элемента.After your class is defined, you can assign an instance of the class to the template selector property of your element.

Если заданы ContentTemplate свойства ии,тоэтосвойствоигнорируется.ContentTemplateSelectorIf both the ContentTemplateSelector and the ContentTemplate properties are set, then this property is ignored.

Использование атрибута XAMLXAML Attribute Usage

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

Значения XAMLXAML Values

ресаурцеекстенсионResourceExtension
Расширение разметки, которое определяет, как ссылаться на ресурс StaticResource шаблона: или. DynamicResourceA markup extension that identifies how to reference the template resource, either StaticResource or DynamicResource. См. раздел ресурсы XAML.See XAML Resources.

темплатеселекторкэйTemplateSelectorKey
Ключ, определяющий запрашиваемый селектор шаблона.The key that identifies the requested template selector. Ключ ссылается на существующий ресурс в ResourceDictionary.The key refers to an existing resource in a ResourceDictionary.

Сведения о свойстве зависимостейDependency Property Information

Поле идентификатораIdentifier field ContentTemplateSelectorProperty
Свойства метаданных, для которых задано значениеtrueMetadata properties set to true НетNone

Применяется к