Ja. Sie können dafür Benutzersteuerelemente verwenden. Sie können XAML oder nur Code verwenden. Ich werde den XAML-Weg erklären.
Fügen Sie einfach eine neue XAML-Seite hinzu und ändern Sie den Root-Typ von ContentPage
zu StackLayout
. Der Stammtyp kann jedes andere Layout oder Steuerelement sein. Sie müssen entscheiden, was am besten passt.
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>
Wir binden die Eigenschaften Name, Age, CatAmount
zu drei verschiedenen Etiketten. Wir nehmen an, dass die BindingContext
dieser Steuerung ein Objekt vom Typ PersonData
ist (siehe unten). In Ihrem Code hinter müssen Sie auch den Typ ändern.
MyControl.xaml.cs
public partial class MyControl : StackLayout
{
public MyControl()
{
InitializeComponent();
}
}
In Ihrer Seite, müssen Sie einen neuen Namespace hinzufügen (z local
, die Ihnen Punkte Montage, zum Beispiel App6
oder MyApp.Whatever
). Dann können Sie es über local:MyControl
verwenden. In unserem Beispiel-Steuerelement binden wir die BindingContext
an Person
, die eine Eigenschaft des BindingContext unserer Seite ist, die (in unserem Fall) die Seite selbst ist. Wenn sich Ihr Steuerelement in einem Sub-Namespace befindet, müssen Sie den Namespace-Teil entsprechend ändern.
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;
}
}
Und in Ihrem Szenario erwähnt, können Sie einfach von ContentPage
erben und Ihre gemeinsame Elemente hinzufügen und Sie geerbte Seite als Basisklasse Ihrer Seiten.
TemplatedPage - Xamarin.Forms 2,1
Mit Xamarin.Forms 2.1 eingeführt sie TemplatedPage
. Sie finden das Beispiel hier: http://xfcomplete.net/general/2016/01/20/control-templates/. Das LoginView
Beispiel mit der ContentPresenter
passt genau zu Ihrem Szenario.
Wenn ich eine Steuervorlage anwenden auf Seitenebene im Gegensatz zu Anwendungsebene, kann de rived Klassen verwenden diese Kontrollschablone? – Mark13426
Kann dies mit C# -Code anstelle von XAML gemacht werden? – jbyrd
@jbyrd - Ich habe es nicht versucht, aber Sie sollten in der Lage sein. Erstellen Sie ein neues ControlTemplate(), und fügen Sie die Steuerelemente hinzu. Weisen Sie es dann der Eigenschaft ControlTemplate auf der Seite zu. –