2016-05-04 4 views
4

Можно ли определить DataTemplate в файле XAML и использовать его в коде?Определить DataTemplate в XAML?

Согласно этому ответу: Silverlight: Creating a DataTemplate in XAML, and assigning it in code?

я могу определить его и добавить его в словарь ресурсов в App.xaml, но у меня нет App.xaml файл в моем проекте PCL.

Это звучит тривиально, должен быть стандартный способ сделать это.

Вы можете найти пример DataTemplate here

ответ

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 в App.cs
  • вызова InitializeComponent() в конструктор App
  • перейти к свойствам App.xaml и установить
    • Сложение Действие: Embedded Resource
    • пользовательского инструмента: 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 
    } 
} 
+0

Невозможно определить его как отдельный класс вместо ресурса на странице или в приложении? –

+0

Вы имеете в виду что-то вроде 'class MyDataTemplate: DataTemplate' ?? –

+0

Да, но в XAML .......... padding для SO comment system –

Смежные вопросы