共用方式為


DataTemplate 類別

定義

說明資料物件的視覺化結構。 針對顯示資料值的範本中特定元素使用資料系結。

/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate, IElementFactory
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate, IElementFactory
Public Class DataTemplate
Inherits FrameworkTemplate
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
<DataTemplate ...>
  templateContent
</DataTemplate>
 

繼承
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
屬性
實作

Windows 需求

裝置系列
Windows 10 (已於 10.0.10240.0 引進)
API contract
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)

範例

下列範例會使用 DataTemplate 來顯示 ListBox的專案。 在此範例中, ListBox 會系結至 物件的集合 Customer 。 DataTemplate 包含系結至 、 LastNameAddress 屬性的 FirstNameTextBlock控制項。 如需資料系結的詳細資訊,請參閱 深入資料系結

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

    <ListBox ItemsSource="{StaticResource customers}" Width="350" Margin="0,5,0,10">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Padding="5,0,5,0"
          Text="{Binding FirstName}" />
                    <TextBlock Text="{Binding LastName}" />
                    <TextBlock Text=", " />
                    <TextBlock Text="{Binding Address}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>
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("Seo-yun", "Jun",
                "56 East Seventh Street, Apartment 89"));
        Add(new Customer("Guido", "Pica",
                "78 South Ninth Street, Apartment 10"));
    }

}
Public Class Customer
    Private _firstName As String
    Private _lastName As String
    Private _address As String

    Public Property FirstName() As String
        Get
            Return _firstName
        End Get

        Set(ByVal value As String)
            _firstName = value
        End Set
    End Property

    Public Property LastName() As String
        Get
            Return _lastName
        End Get

        Set(ByVal value As String)
            _lastName = value
        End Set
    End Property

    Public Property Address() As String
        Get
            Return _address
        End Get

        Set(ByVal value As String)
            _address = value
        End Set
    End Property

    Public Sub New(ByVal firstName As String, ByVal lastName As String, ByVal address As String)
        Me.FirstName = firstName
        Me.LastName = lastName
        Me.Address = address
    End Sub

End Class

Public Class Customers
    Inherits ObservableCollection(Of Customer)

    Public Sub New()
        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("Seo-yun", "Jun", "56 East Seventh Street, Apartment 89"))
        Add(New Customer("Guido", "Pica", "78 South Ninth Street, Apartment 10"))
    End Sub

End Class

備註

DataTemplate 物件會當做這些屬性的值使用:

您通常會使用 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 使用。 ContentTemplate的資料範本也可以使用資料系結。 但在此情況下,資料內容與套用範本的專案相同。 這通常是一個資料物件,而且沒有專案的概念。

您可以將 DataTemplate 放置為 XAML 中 ItemTemplate 屬性元素的直接子系。 這稱為 內嵌範本 ,如果您不需要針對 UI 的其他區域使用相同的資料範本,就會這麼做。 您也可以將 DataTemplate 定義為資源,然後將資源參考為 ItemTemplate 屬性的值。 一旦它是資源,您就可以針對需要資料範本的多個 UI 元素使用相同的範本。 如果您將資料範本分解為 Application.Resources,您甚至可以為 UI 的不同頁面共用相同的範本。

資料範本內容的 XAML 用法不會公開為可設定的程式碼屬性。 這是 DataTemplate XAML 處理中內建的特殊行為。

針對進階資料系結案例,您可能想要讓資料的屬性決定哪個範本應該產生其 UI 標記法。 在此案例中,您可以使用 DataTemplateSelector 並設定 ItemTemplateSelector 之類的屬性,以將其指派給資料檢視。 DataTemplateSelector是您自行撰寫的邏輯類別,其方法會根據您自己的邏輯與您的資料互動,將一個 DataTemplate 傳回至系結引擎。 如需詳細資訊,請參閱深入了解資料繫結

XAML 附加屬性

DataTemplate 是 XAML 附加屬性的主機服務類別。

為了支援 XAML 處理器對附加屬性的存取,以及公開對等 的 getset 作業給程式碼,每個 XAML 附加屬性都有一對 Get 和 Set 存取子方法。 在程式碼中取得或設定值的另一種方式是使用相依性屬性系統,呼叫 GetValueSetValue 並將識別碼欄位傳遞為相依性屬性識別碼。

附加屬性 描述
ExtensionInstance 取得或設定延伸模組實例,這個實例定義分階段轉譯資料範本的協助程式方法。

版本歷程記錄

Windows 版本 SDK 版本 新增值
1809 17763 GetElement
1809 17763 RecycleElement

建構函式

DataTemplate()

初始化 DataTemplate 類別的新實例。

屬性

Dispatcher

取得這個 物件相關聯的 CoreDispatcherCoreDispatcher代表可在 UI 執行緒上存取DependencyObject的功能,即使程式碼是由非 UI 執行緒起始也一樣。

(繼承來源 DependencyObject)
ExtensionInstanceProperty

識別 ExtensionInstance XAML 附加屬性。

附加屬性

ExtensionInstance

取得或設定延伸模組實例,這個實例定義分階段轉譯資料範本的協助程式方法。

方法

ClearValue(DependencyProperty)

清除相依性屬性的本機值。

(繼承來源 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

傳回為相依性屬性建立的任何基底值,如果動畫未使用中,則適用此屬性。

(繼承來源 DependencyObject)
GetElement(ElementFactoryGetArgs)

建立或擷取DataTemplate中宣告之UIElement物件的現有實例。

GetExtensionInstance(FrameworkElement)

取得目標專案的 DataTemplate.ExtensionInstance XAML 附加屬性的值。

GetValue(DependencyProperty)

DependencyObject傳回相依性屬性的目前有效值。

(繼承來源 DependencyObject)
LoadContent()

DataTemplate中建立UIElement物件。

ReadLocalValue(DependencyProperty)

如果已設定本機值,則傳回相依性屬性的本機值。

(繼承來源 DependencyObject)
RecycleElement(ElementFactoryRecycleArgs)

回收先前使用 GetElement 擷取的 UIElement

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

註冊通知函式,以接聽此DependencyObject實例上特定DependencyProperty的變更。

(繼承來源 DependencyObject)
SetExtensionInstance(FrameworkElement, IDataTemplateExtension)

設定目標專案的 DataTemplate.ExtensionInstance XAML 附加屬性的值。

SetValue(DependencyProperty, Object)

設定 DependencyObject上相依性屬性的本機值。

(繼承來源 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

取消先前透過呼叫 RegisterPropertyChangedCallback註冊的變更通知。

(繼承來源 DependencyObject)

適用於

另請參閱