在XAML中定义DataTemplate?

时间:2016-05-04 23:52:47

标签: xamarin xamarin.forms

是否可以在XAML文件中定义DataTemplate并在代码中使用它?

根据这个答案: Silverlight: Creating a DataTemplate in XAML, and assigning it in code?

我可以定义它并将其添加到App.xaml中的Resources字典中,但我的PCL项目中没有App.xaml文件。

这听起来像是一件微不足道的事情,必须有一种标准的方法来做到这一点。

您可以找到DataTemplate here

的示例

1 个答案:

答案 0 :(得分:0)

是的,只有x:Key而不是x:Name几乎相同。

<ContentPage.Resources>
    <ResourceDictionary>
      <DataTemplate x:Key="myTemplate"></DataTemplate>
    </ResourceDictionary>
</ContentPage.Resources>

并在您网页的代码中:

var myTemplate = (DataTemplate)Resources["myTemplate"];

如果要在App.xaml中定义它,也可以这样做。您必须手动创建该文件。请查看示例https://github.com/xamarin/xamarin-forms-samples/tree/master/WorkingWithStyles

创建App.xaml:

  • 创建一个App.xaml文件
  • partial
  • 中将App.cs添加到App的类定义中
  • InitializeComponent()
  • 的构造函数中调用App
  • 转到App.xaml的属性并设置
    • 构建操作:嵌入式资源
    • 自定义工具:MSBuild:UpdateDesignTimeXaml

它应该是这样的:

<强>的App.xaml

<Application
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="App6.App">
    <Application.Resources>
        <ResourceDictionary>
            <DataTemplate x:Key="myTemplate"></DataTemplate>
        </ResourceDictionary>
    </Application.Resources>
</Application>  

<强> App.cs

public partial class App : Application
{
    public App()
    {
        InitializeComponent();
        var myTemplate = (DataTemplate)Resources["myTemplate"];
        MainPage = new Page2();
    }

    protected override void OnStart()
    {
        // Handle when your app starts
    }

    protected override void OnSleep()
    {
        // Handle when your app sleeps
    }

    protected override void OnResume()
    {
        // Handle when your app resumes
    }
}