信息
您所需的主题如下所示。但此主题未包含在此库中。

DataTemplate 类

2013/12/13

描述数据对象的可视结构。

Namespace:  System.Windows
程序集:  System.Windows(位于 System.Windows.dll 中)
XMLNS for XAML: 未映射到 xmlns。

public class DataTemplate : FrameworkTemplate
<DataTemplate ...>
  templateContent
</DataTemplate>

XAML 值

templateContent

定义此 DataTemplate 的对象树。该树必须有一个根元素,而该根元素可以有零个或更多的子元素。

DataTemplate 类型公开以下成员。

  名称说明
公共方法DataTemplate初始化 DataTemplate 类的新实例。
返回顶部

  名称说明
公共属性Dispatcher获取与此对象关联的 Dispatcher (从 DependencyObject 继承。)
返回顶部

  名称说明
公共方法CheckAccess确定调用线程是否可以访问此对象。 (从 DependencyObject 继承。)
公共方法ClearValue清除依赖项属性的本地值。 (从 DependencyObject 继承。)
公共方法Equals(Object)确定指定的 Object 是否等于当前的 Object (从 Object 继承。)
受保护的方法Finalize允许 Object 在垃圾回收器回收该对象之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
公共方法GetAnimationBaseValue返回为 Windows Phone 依赖项属性设置的任意基值,在动画不活动时将应用它们。 (从 DependencyObject 继承。)
公共方法GetHashCode用作特定类型的哈希函数。 (从 Object 继承。)
公共方法GetType获取当前实例的 Type (从 Object 继承。)
公共方法GetValueDependencyObject 返回依赖项属性的当前有效值。 (从 DependencyObject 继承。)
公共方法LoadContent创建 DataTemplate 中的 UIElement 对象。
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (从 Object 继承。)
公共方法ReadLocalValue返回依赖项属性的本地值(如果设置了本地值)。 (从 DependencyObject 继承。)
公共方法SetValueDependencyObject 设置依赖项属性的本地值。 (从 DependencyObject 继承。)
公共方法ToString返回一个字符串,它表示当前的对象。 (从 Object 继承。)
返回顶部

通常使用 DataTemplate 指定数据的直观表示。当您将 ItemsControl(如 ListBox)绑定到整个集合时,DataTemplate 对象尤其有用。如果没有特殊说明,ListBox 将在集合中显示对象的字符串表示形式。在此情况下,可以使用 DataTemplate 定义数据对象的外观。DataTemplate 的内容变成数据对象的可视结构。

可以在 DataTemplate 中使用数据绑定。例如,假定 ListBox 绑定到 Customer 对象的集合,并且将 ItemTemplate 属性设置为 DataTemplate。创建 ListBox 时,将为集合中的每个 Customer 创建一个 ListBoxItem,并将 ListBoxItemDataContext 设置为相应的客户。也就是说,第一个 ListBoxItemDataContext 设置为第一个客户,第二个 ListBoxItemDataContext 设置为第二个客户,依此类推。可以将 DataTemplate 中的元素绑定到 Customer 对象的属性。

还可以使用 DataTemplate 在多个 ContentControl 对象之间共享 UIElement 对象。例如,假设需要应用程序上的多个按钮具有相同的图形。可以创建一个包含此图形的 DataTemplate,并将它用作这些按钮的 ContentTemplate。有关更多信息,请参见 ContentControl.ContentTemplate

可以将 DataTemplate 作为 object.ItemTemplate 属性元素的直接子级。还可以定义一个 DataTemplate 作为资源,然后将该资源作为 ItemTemplate 属性的值引用。

定义用于创建数据模板的内容的 XAML 用法不作为可设置的属性公开。这是内置于 DataTemplate 对象元素的 XAML 处理的特殊行为。

下面的示例使用 DataTemplate 显示 ListBox 的项。在此示例中,ListBox 绑定到 Customer 对象的集合。DataTemplate 包含 TextBlock 控件,这些控件绑定到 FirstNameLastNameAddress 属性。有关数据绑定的更多信息,请参见Windows Phone 的数据绑定


<Grid>
    <Grid.Resources>
        <src:Customers x:Key="customers"/>
    </Grid.Resources>

    <ListBox ItemsSource="{StaticResource customers}" Margin="0,5,0,10">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" >
                    <TextBlock Padding="3,0,3,0"
          Text="{Binding FirstName}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
                    <TextBlock Text="{Binding LastName}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
                    <TextBlock Text=", " FontSize="{StaticResource PhoneFontSizeSmall}"/>
                    <TextBlock Text="{Binding Address}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>


下面的示例演示 Customer 类和 ListBox 绑定到的集合。


public class Customer
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public String Address { get; set; }

    public Customer(String firstName, String lastName, String address)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Address = address;
    }

}

public class Customers : ObservableCollection<Customer>
{
    public Customers()
    {
        Add(new Customer("Michael", "Anderberg",
                "12 North Third Street, Apartment 45"));
        Add(new Customer("Chris", "Ashton",
                "34 West Fifth Street, Apartment 67"));
        Add(new Customer("Cassie", "Hicks",
                "56 East Seventh Street, Apartment 89"));
        Add(new Customer("Guido", "Pica",
                "78 South Ninth Street, Apartment 10"));
    }

}


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

此类型的所有公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

显示: