Да. Для этого вы можете использовать пользовательские элементы управления. Вы можете использовать только XAML или код. Я объясню способ XAML.
Просто добавьте новую страницу XAML и измените корневой тип с ContentPage
на StackLayout
. Корневым типом может быть любой другой макет или элемент управления. Вы должны решить, что подходит лучше всего.
MyControl.xaml
<?xml version="1.0" encoding="utf-8" ?>
<StackLayout xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="App6.MyControl">
<Label Text="{Binding Name}" />
<Label Text="{Binding Age}" />
<Label Text="{Binding CatAmount}" />
</StackLayout>
Мы привязываем свойства Name, Age, CatAmount
к трем разным меткам. Предположим, что BindingContext
этого элемента управления является объектом типа PersonData
(см. ниже). В вашем коде вы также должны изменить тип.
MyControl.xaml.cs
public partial class MyControl : StackLayout
{
public MyControl()
{
InitializeComponent();
}
}
На вашей странице вы должны добавить новое пространство имен (например, local
, которое указывает на вашу сборку, например, App6
или MyApp.Whatever
). Затем вы можете использовать его через local:MyControl
. В нашем примере элемента управления мы привязываем BindingContext
к Person
, которое является свойством BindingContext нашей страницы, то есть (в нашем случае) самой страницей. Если ваш элемент управления находится в подпространстве имен, вы должны соответствующим образом изменить часть пространства имен.
Page2.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:App6;assembly=App6"
x:Class="App6.Page2">
<local:MyControl BindingContext="{Binding Person}"></local:MyControl>
</ContentPage>
Page2.xaml.cs
public class PersonData
{
public string Name { get; set; }
public int Age { get; set; }
public int CatAmount { get; set; }
}
public partial class Page2 : ContentPage
{
public PersonData Person { get; set; }
public Page2()
{
Person = new PersonData {Age = 28, Name = "Sven", CatAmount = 2};
InitializeComponent();
BindingContext = this;
}
}
И в упомянутом вами Сценарии вы можете просто наследоваться от ContentPage
и добавлять свои общие элементы и использовать унаследованную вами страницу в качестве базового класса ваших страниц.
Шаблон страницы — Xamarin.Forms 2.1
В Xamarin.Forms 2.1 они представили TemplatedPage
. Пример вы найдете здесь: http://xfcomplete.net/general/2016/01/20/control-templates/ . Пример LoginView
с ContentPresenter
точно соответствует вашему сценарию.
person
Sven-Michael Stübe
schedule
24.03.2016