Поделиться через


ItemsControl.ItemTemplateSelector Свойство

Определение

Возвращает или задает пользовательскую логику выбора шаблона, используемого для отображения каждого элемента.

public:
 property System::Windows::Controls::DataTemplateSelector ^ ItemTemplateSelector { System::Windows::Controls::DataTemplateSelector ^ get(); void set(System::Windows::Controls::DataTemplateSelector ^ value); };
[System.ComponentModel.Bindable(true)]
public System.Windows.Controls.DataTemplateSelector ItemTemplateSelector { get; set; }
[<System.ComponentModel.Bindable(true)>]
member this.ItemTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ItemTemplateSelector As DataTemplateSelector

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

Настраиваемый DataTemplateSelector объект, предоставляющий логику DataTemplateи возвращающий объект. Значение по умолчанию — null.

Атрибуты

Примеры

В следующем примере auctionItemDataTemplateSelector имя ресурса (соответствующее AuctionItemDataTemplateSelector классу) назначается ItemTemplateSelector свойству объекта ItemsControl.

<ItemsControl 
   Template="{StaticResource ScrollTemplate}" 
   ItemsSource="{Binding Source={StaticResource items_list}}"
   ItemTemplateSelector="{StaticResource auctionItemDataTemplateSelector}" >
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <StackPanel />
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
</ItemsControl>

В следующем примере показана реализация AuctionItemDataTemplateSelector класса с переопределением SelectTemplate метода:

using System.Windows;
using System.Windows.Controls;

namespace SDKSample
{
    public class AuctionItemDataTemplateSelector : DataTemplateSelector
    {
        public override DataTemplate 
            SelectTemplate(object item, DependencyObject container)
        {
            FrameworkElement element = container as FrameworkElement;

            if (element != null && item != null && item is AuctionItem)
            {
                AuctionItem auctionItem = item as AuctionItem;
                Window window = Application.Current.MainWindow;

                switch (auctionItem.SpecialFeatures)
                {
                    case SpecialFeatures.None:
                        return 
                            element.FindResource("AuctionItem_None") 
                            as DataTemplate;
                    case SpecialFeatures.Color:
                        return 
                            element.FindResource("AuctionItem_Color") 
                            as DataTemplate;
                }
            }

            return null;
        }
    }
}

Namespace SDKSample
    Public Class AuctionItemDataTemplateSelector
        Inherits DataTemplateSelector
        Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate

            Dim element As FrameworkElement = TryCast(container, FrameworkElement)

            If element isnot Nothing andalso item IsNot Nothing AndAlso TypeOf item Is AuctionItem Then

                Dim auctionItem As AuctionItem = TryCast(item, AuctionItem)

                Select Case auctionItem.SpecialFeatures
                    Case SpecialFeatures.None
                        Return TryCast(element.FindResource("AuctionItem_None"), DataTemplate)
                    Case SpecialFeatures.Color
                        Return TryCast(element.FindResource("AuctionItem_Color"), DataTemplate)
                End Select
            End If

            Return Nothing
        End Function
    End Class
End Namespace

В этом случае в SelectTemplate методе класса существует логика возврата соответствующего шаблона на основе значения SpecialFeatures свойства переданного item объекта. Шаблон для возврата находится в ресурсах охватывающего элемента Window.

При установке ItemTemplateSelector свойства ItemsControl он направляется для автоматического AuctionItemDataTemplateSelector вызова SelectTemplate метода для каждого элемента в коллекции, к которому привязан.ItemsControl Вызов передает элемент данных в виде объекта. Затем DataTemplate метод возвращается для отображения этого элемента данных.

Другой пример см. в разделе "Общие сведения о шаблоне данных".

Комментарии

Вы используете для ItemTemplate указания визуализации объектов данных. Если у вас несколько шаблонов, и вы хотите предоставить логику для возврата используемого шаблона, и вы используете это свойство. Обратите внимание, что это свойство игнорируется, если ItemTemplate задано.

Это ItemsControl обеспечивает большую гибкость для настройки визуальных элементов и предоставляет множество свойств стилизации и шаблонов. ItemContainerStyle Используйте свойство или ItemContainerStyleSelector свойство, чтобы задать стиль, чтобы повлиять на внешний вид элементов, содержащих элементы данных. Например, ListBoxсозданные контейнеры являются ListBoxItem элементами управления, для ComboBoxкоторых они являются ComboBoxItem элементами управления. Чтобы повлиять на макет элементов, используйте ItemsPanel это свойство. Если вы используете группирование в элементе управления, можно использовать GroupStyle или GroupStyleSelector свойство.

Дополнительные сведения см. в разделе "Общие сведения о шаблоне данных".

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

<object ItemTemplateSelector="ResourceExtension SelectorResourceKey"/>

Значения XAML

ResourceExtension Одно из следующих элементов: StaticResourceили DynamicResource. Если сами стили не содержат ссылки на потенциальные ссылки во время выполнения, такие как системные ресурсы или предпочтения пользователя, StaticResource ссылка на стиль обычно рекомендуется для повышения производительности.

SelectorResourceKeyx:Key строковое значение, ссылающееся на селектор, запрашиваемый в качестве ресурса.

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

Элемент Ценность
Поле идентификатора ItemTemplateSelectorProperty
Свойства метаданных, равные свойству true Нет

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

См. также раздел