ItemsControl.ItemTemplate 属性

定义

获取或设置用来显示每个项的 DataTemplate

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

属性值

指定数据对象的可视化的 DataTemplate。 默认值为 null

属性

示例

以下示例演示如何创建 DataTemplate 内联。 DataTemplate指定每个数据项在 中显示为三TextBlockStackPanel元素。 在此示例中,数据对象是一个名为 的 Task类。 请注意,此模板中的每个 TextBlock 元素都绑定到 类的 Task 一个属性。

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <StackPanel>
         <TextBlock Text="{Binding Path=TaskName}" />
         <TextBlock Text="{Binding Path=Description}"/>
         <TextBlock Text="{Binding Path=Priority}"/>
       </StackPanel>
     </DataTemplate>
   </ListBox.ItemTemplate>
 </ListBox>

更常见的是在 resources 节中定义 , DataTemplate 以便它可以是可重用对象,如以下示例所示:

<Window.Resources>
<DataTemplate x:Key="myTaskTemplate">
  <StackPanel>
    <TextBlock Text="{Binding Path=TaskName}" />
    <TextBlock Text="{Binding Path=Description}"/>
    <TextBlock Text="{Binding Path=Priority}"/>
  </StackPanel>
</DataTemplate>
</Window.Resources>

现在可以将 myTaskTemplate 用作资源,如以下示例所示:

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplate="{StaticResource myTaskTemplate}"/>

有关完整示例,请参阅数据模板化示例简介

注解

使用 ItemTemplate 指定数据对象的可视化效果。 ItemsControl如果绑定到集合对象,并且未使用 DataTemplate提供特定的显示说明,则每个项的生成 UI 都是基础集合中每个对象的字符串表示形式。

在 上ItemsControl设置 ItemTemplate 时,将生成 UI,如下所示 (使用 ListBox 作为示例) :

  1. 在内容生成期间, ItemsPanel 会启动请求, ItemContainerGenerator 以便为每个数据项创建容器。 对于 ListBox,容器为 ListBoxItem。 生成器调用回 以 ItemsControl 准备容器。

  2. 准备的一部分涉及将 的 ListBox 复制ItemTemplateContentTemplateListBoxItem

  3. 与所有 ContentControl 类型类似, ControlTemplateListBoxItem 包含 ContentPresenter。 应用模板时,会创建一个 ContentPresenter ,其 ContentTemplate 绑定到 ContentTemplateListBoxItem

  4. 最后, ContentPresenter 将应用于 ContentTemplate 自身,并创建 UI。

如果定义了多个 DataTemplate ,并且想要提供逻辑以编程方式选择和应用 DataTemplate,请使用 ItemTemplateSelector 属性。

ItemsControl 视觉自定义提供了极大的灵活性,并提供了许多样式和模板化属性。 ItemContainerStyle使用 属性或 ItemContainerStyleSelector 属性设置样式以影响包含数据项的元素的外观。 例如,对于 ListBox,生成的容器是 ListBoxItem 控件;对于 ComboBox,它们是 ComboBoxItem 控件。 若要影响项的布局,请使用 ItemsPanel 属性。 如果在控件上使用分组,则可以使用 GroupStyleGroupStyleSelector 属性。

有关详细信息,请参阅 数据模板化概述

XAML 属性用法

<object ItemTemplate=" ResourceExtension TemplateResourceKey"/>

XAML 值

ResourceExtension 以下选项之一: StaticResource 标记扩展DynamicResource 标记扩展。 除非样式本身包含对潜在运行时引用(如系统资源或用户首选项)的引用,否则为了提高性能,通常建议使用 StaticResource 标记扩展 引用样式。

TemplateResourceKeyx:Key 指令 字符串值,引用作为资源请求的模板。

依赖项属性信息

标识符字段 ItemTemplateProperty
元数据属性设置为 true

适用于

另请参阅