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 |
Нет |