DataTemplate 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
說明資料物件的視覺化結構。 針對顯示資料值的範本中特定元素使用資料系結。
/// [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>
- 繼承
- 屬性
- 實作
Windows 需求
裝置系列 |
Windows 10 (已於 10.0.10240.0 引進)
|
API contract |
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)
|
範例
下列範例會使用 DataTemplate 來顯示 ListBox的專案。 在此範例中, ListBox 會系結至 物件的集合 Customer
。 DataTemplate 包含系結至 、 LastName
和 Address
屬性的 FirstName
TextBlock控制項。 如需資料系結的詳細資訊,請參閱 深入資料系結。
<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 物件會當做這些屬性的值使用:
- ItemsControl.ItemTemplate (由各種專案控制項繼承,例如 ListView、 GridView、 ListBox)
- ContentControl.ContentTemplate (由各種內容控制項繼承,例如 Button、 Frame、 SettingsFlyout)
- 各種專案控制項類別的HeaderTemplate和FooterTemplate屬性
- ItemsPresenter.HeaderTemplate 和 ItemsPresenter.FooterTemplate
- RichEditBox、TextBox等文字控制項的HeaderTemplate和FooterTemplate屬性
- ComboBox、DatePicker、Hub、HubSection、Pivot、Slider、TimePicker、ToggleSwitch等控制項的HeaderTemplate屬性;其中有些也有FooterTemplate
您通常會使用 DataTemplate 來指定資料的視覺標記法。 當您將 ItemsControl 例如 ListBox 系結至整個集合時,DataTemplate 物件特別有用。 如果沒有特定指示, ListBox 會顯示集合中物件的字串表示。 使用 DataTemplate 定義每個資料物件的外觀。 DataTemplate 的內容會成為資料物件的視覺結構。
您通常會在 DataTemplate 中使用資料系結。 例如,假設 ListBox 系結至 物件的集合 Customer
,並將 ItemTemplate 屬性設定為 DataTemplate 。 建立ListBox時,會針對 Customer
集合中的每個專案建立ListBoxItem,並將ListBoxItem的DataCoNtext設定為適當的客戶。 換句話說,第一個ListBoxItem的DataCoNtext會設定為第一個客戶、第二個ListBoxItem的DataCoNtext設定為第二個客戶等等。 您可以系結 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 處理器對附加屬性的存取,以及公開對等 的 get 和 set 作業給程式碼,每個 XAML 附加屬性都有一對 Get 和 Set 存取子方法。 在程式碼中取得或設定值的另一種方式是使用相依性屬性系統,呼叫 GetValue 或 SetValue 並將識別碼欄位傳遞為相依性屬性識別碼。
附加屬性 | 描述 |
---|---|
ExtensionInstance | 取得或設定延伸模組實例,這個實例定義分階段轉譯資料範本的協助程式方法。 |
版本歷程記錄
Windows 版本 | SDK 版本 | 新增值 |
---|---|---|
1809 | 17763 | GetElement |
1809 | 17763 | RecycleElement |
建構函式
DataTemplate() |
初始化 DataTemplate 類別的新實例。 |
屬性
Dispatcher |
取得這個 物件相關聯的 CoreDispatcher 。 CoreDispatcher代表可在 UI 執行緒上存取DependencyObject的功能,即使程式碼是由非 UI 執行緒起始也一樣。 (繼承來源 DependencyObject) |
ExtensionInstanceProperty |
識別 ExtensionInstance XAML 附加屬性。 |
附加屬性
ExtensionInstance |
取得或設定延伸模組實例,這個實例定義分階段轉譯資料範本的協助程式方法。 |