我想在App.XAML中定义Datatemplate,然后为我需要使用此itemtemplate的任何页面共享它。我不知道怎么做
答案 0 :(得分:14)
这取决于您要使用的绑定类型。
如果您使用标准XAML绑定,则一切都与WPF中的相同:
在Application.Resources
中定义模板:
<Application.Resources>
<DataTemplate x:Key="Template1">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Prop1}" />
<TextBox Text="{Binding Prop2}" />
</StackPanel>
</DataTemplate>
</Application.Resources>
在页面中引用模板:
<ListView ItemsSource="{Binding Items}" ItemTemplate="{StaticResource Template1}" />
如果您正在使用编译{x:bind}
绑定,则需要在单独的资源字典中定义模板,其中代码将落后于生成的代码将会结束:
为资源字典创建一个新的分部类:
public partial class DataTemplates
{
public DataTemplates()
{
InitializeComponent();
}
}
使用数据模板基于此分部类创建资源字典:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MyNamespace"
x:Class="MyNamespace.DataTemplates">
<DataTemplate x:Key="Template2" x:DataType="local:MyClass">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind Prop1}" />
<TextBox Text="{x:Bind Prop2}" />
</StackPanel>
</DataTemplate>
</ResourceDictionary>
将资源字典合并到Application.Resources
:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<local:DataTemplates/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
最后使用页面中的模板:
<ListView ItemsSource="{Binding Items}" ItemTemplate="{StaticResource Template2}" />
您可以查看Igor's blog post了解详情。自发布帖子发布以来,没有任何重大变化。