Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Steuerelementvorlagen
WPF unterstützt das Konzept von Steuerelementvorlagen , die die Visualisierungsanweisungen für ein Steuerelement (Button, ListBoxusw.) bereitstellen. Wie bereits erwähnt, verwendet Xamarin.Forms konkrete Renderingklassen für diese, die mit der nativen Plattform (iOS, Android usw.) interagieren, um das Steuerelement zu visualisieren.
Xamarin.Forms hat jedoch einen ControlTemplate Typ – es wird für Designobjekte Page verwendet. Sie bietet eine Definition für einen Page einheitlichen Inhalt, ermöglicht es dem Benutzer der Seite jedoch, Farben, Schriftarten usw. zu ändern und sogar Elemente hinzuzufügen, um sie für die Anwendung eindeutig zu machen.
Allgemeine Verwendungen hierfür sind z. B. Authentifizierungsdialoge, Eingabeaufforderungen und bereitstellen ein standardisiertes, aber designfähiges Seitenerscheinungsbild, das in der App angepasst werden kann. Im Rahmen dieser Unterstützung werden viele vertraute WPF-benannte Steuerelemente verwendet:
ContentPageContentViewContentPresenterTemplateBinding
Aber es ist wichtig zu wissen, dass diese nicht denselben Zweck in Xamarin.Forms erfüllen. Weitere Informationen zu diesem Feature finden Sie auf der Dokumentationsseite.
XAML
XAML wird als deklarative Markupsprache für WPF und Xamarin.Forms verwendet. Die Syntax ist größtenteils identisch – der Hauptunterschied sind die Objekte, die von den XAML-Diagrammen definiert/erstellt werden.
Xamarin.Forms unterstützt die XAML 2009-Spezifikation. Dies erleichtert das Definieren von Daten wie
strings,ints usw. sowie das Definieren generischer Typen und Übergeben von Argumenten an Konstruktoren.Es gibt derzeit keine Möglichkeit, XAML wie WPF
XamlReaderdynamisch zu laden. Sie können jedoch die gleichen grundlegenden Funktionen mit einem NuGet-Paket erhalten.
Markuperweiterungen
Xamarin.Forms unterstützt das Erweitern von XAML über Markuperweiterungen, ähnlich wie WPF. Aus der Box besteht aus den gleichen grundlegenden Bausteinen:
{x:Array}{Binding}{DynamicResource}{x:Null}{x:Static}{StaticResource}{x:Type}
Darüber hinaus enthält {x:Reference} sie die XAML 2009-Spezifikation und eine {TemplateBinding} Markuperweiterung, die für die spezielle Version von ControlTemplate Xamarin.Forms verwendet wird.
Warnung
Die ControlTemplate Unterstützung ist nicht identisch – obwohl sie denselben Namen hat.
Xamarin.Forms unterstützt auch benutzerdefinierte Markuperweiterungen – die Implementierung unterscheidet sich jedoch geringfügig. In WPF müssen Sie von MarkupExtension einer abstrakten Basisklasse abgeleitet werden. In Xamarin.Forms wird das durch eine Schnittstelle IMarkupExtension ersetzt oder IMarkupExtension<T> flexibler.
Genau wie WPF ist die einzelne erforderliche Methode eine ProvideValue Methode, um den Wert aus der Markuperweiterung zurückzugeben.
Bindungsinfrastruktur
Eines der zentralen Konzepte, die übertragen werden, ist eine Datenbindungsinfrastruktur, um visuelle Eigenschaften mit .NET-Dateneigenschaften zu verbinden. Dies ermöglicht Architekturmuster wie MVVM. Das grundlegende Design ist identisch – Sie verfügen über eine bindbare Basisklasse BindableObject, in WPF ist dies die DependencyObject-Klasse . Diese Basisklasse wird als Stamm-Vorgänger für alle Objekte verwendet, die als Ziele an der Datenbindung teilnehmen. Die abgeleiteten Klassen machen dann BindableProperty-Objekte verfügbar, die als Sicherungsspeicher für Eigenschaftswerte fungieren (diese werden als DependencyProperty-Objekte in WPF definiert).
Definieren von bindbaren Eigenschaften
Die Definition für eine bindbare Eigenschaft in Xamarin.Forms ist identisch mit WPF:
- Das Objekt muss von
BindableObject. - Es muss ein öffentliches statisches Feld vom Typ
BindablePropertydeklariert sein, um den Sicherungsspeicherschlüssel für die Eigenschaft zu definieren. - Es sollte ein Öffentlicher Instanz-Eigenschaftswrapper vorhanden sein, der den Eigenschaftenwert verwendet
GetValueundSetValueabrufen und ändern kann.
Ein vollständiges Beispiel finden Sie unter Bindable Properties in Xamarin.Forms.
Angefügte Eigenschaften
Angefügte Eigenschaften sind eine Teilmenge der bindungsfähigen Eigenschaft und funktionieren auf die gleiche Weise wie in WPF. Der Hauptunterschied besteht darin, dass der Eigenschaftenwrapper in diesem Fall weggelassen wird und durch eine Reihe statischer Get/Set-Methoden für die eigene Klasse ersetzt wird. Weitere Informationen finden Sie unter "Angefügte Eigenschaften" in Xamarin.Forms .
Verwenden des Bindungsmoduls
Der Prozess für die Verwendung des Bindungsmoduls ist identisch mit der Verwendung in WPF. Sie kann im CodeBehind verwendet werden, indem ein Objekt erstellt wird, das Binding an ein Quellobjekt (beliebiger .NET-Typ) und einen optionalen Eigenschaftswert gebunden ist (wenn es ausgelassen wird, behandelt es das Quellobjekt als die Eigenschaft selbst – genau wie WPF). Anschließend können SetBinding Sie eine beliebige BindableObject Bindung einer BindablePropertyBindung zuordnen.
Alternativ können Sie die Bindungsbeziehung in XAML mithilfe der BindingExtension. Sie weist die gleichen Grundlegendenwerte wie die Erweiterung in WPF auf.
Die Bindungsunterstützung und das Modul ähneln der Silverlight-Implementierung mehr als WPF. Es gibt mehrere fehlende Features, die in Xamarin.Forms nicht implementiert wurden:
- Es gibt keine Unterstützung für die folgenden Features in Bindungen:
- BindingGroupName
- BindsDirectlyToSource
- IsAsync
- MultiBinding
- NotifyOnSourceUpdated
- NotifyOnTargetUpdated
- NotifyOnValidationError
- UpdateSourceTrigger
- UpdateSourceExceptionFilter
- ValidatesOnDataErrors
- ValidatesOnExceptions
- ValidationRules-Auflistung
- XPath
- XmlNamespaceManager
RelativeSource
Es gibt keine Unterstützung für RelativeSource Bindungen. In WPF können Sie eine Bindung an andere visuelle Elemente, die in XAML definiert sind, zulassen. In Xamarin.Forms kann diese Funktion mithilfe der {x:Reference} Markuperweiterung erreicht werden. Angenommen, wir haben ein Steuerelement mit dem Namen "otherControl", das eine Text-Eigenschaft enthält, können wir wie folgt an das Steuerelement binden:
WPF
Text={Binding RelativeSource={RelativeSource otherControl}, Path=Text}
Xamarin.Forms
Text={Binding Source={x:Reference otherControl}, Path=Text}
Die gleiche Funktion kann für das {RelativeSource Self} Feature verwendet werden. Es gibt jedoch keine Unterstützung für das Auffinden von Vorgängern nach Typ ({RelativeSource FindAncestor}).
Bindungskontext
In WPF können Sie einen DataContext Eigenschaftswert definieren, der die Standardbindungsquelle zurückgibt. Wenn die Quelle für eine Bindung nicht definiert ist, wird dieser Eigenschaftswert verwendet. Der Wert wird von der visuellen Struktur geerbt, sodass er auf einer höheren Ebene definiert und dann von untergeordneten Elementen verwendet wird.
In Xamarin.Forms ist dieses Feature verfügbar, aber der Eigenschaftsname ist BindingContext.
Wertkonverter
Wertkonverter werden in Xamarin.Forms vollständig unterstützt – genau wie WPF. Das gleiche Schnittstellen-Shape wird verwendet, aber Xamarin.Forms hat die Schnittstelle im Xamarin.Forms Namespace definiert.
Model View ViewModel
MVVM wird sowohl von WPF als auch von Xamarin.Forms vollständig unterstützt.
WPF enthält einen integrierten, in RoutedCommand dem manchmal verwendet wird; Xamarin.Forms verfügt über keine integrierte Befehlsunterstützung über die ICommand Schnittstellendefinition hinaus. Sie können eine Vielzahl von MVVM-Frameworks hinzufügen, um die erforderlichen Basisklassen zum Implementieren von MVVM hinzuzufügen.
INotifyPropertyChanged und INotifyCollectionChanged
Beide Schnittstellen werden in Xamarin.Forms-Bindungen vollständig unterstützt. Im Gegensatz zu vielen XAML-basierten Frameworks können Eigenschaftsänderungsbenachrichtigungen in Hintergrundthreads in Xamarin.Forms (genau wie WPF) ausgelöst werden, und das Bindungsmodul wechselt ordnungsgemäß zum UI-Thread.
Darüber hinaus unterstützen SynchronizationContext beide Umgebungen und async/await führen eine ordnungsgemäße Thread-Marshalling-Ausführung durch. WPF enthält die Dispatcher Klasse für alle visuellen Elemente, Xamarin.Forms verfügt über eine statische Methode Device.BeginInvokeOnMainThread , die auch verwendet werden kann (obwohl SynchronizationContext sie für plattformübergreifende Codierung bevorzugt wird).
- Xamarin.Forms enthält eine
ObservableCollection<T>Sammlungsänderungsbenachrichtigungen. - Sie können verwenden
BindingBase.EnableCollectionSynchronization, um threadübergreifende Updates für eine Sammlung zu aktivieren. Die API unterscheidet sich geringfügig von der WPF-Variation, überprüfen Sie die Dokumente auf Verwendungsdetails.
Datenvorlagen
Datenvorlagen werden in Xamarin.Forms unterstützt, um das Rendering einer ListView Zeile (Zelle) anzupassen. Im Gegensatz zu WPF, das s für ein inhaltsorientiertes Steuerelement verwenden DataTemplatekann, verwendet Xamarin.Forms derzeit nur diese für ListView. Die Vorlagendefinition kann inline (der ItemTemplate Eigenschaft zugewiesen) oder als Ressource in einer ResourceDictionary.
Darüber hinaus sind sie nicht ganz so flexibel wie ihr WPF-Gegenstück.
- Das Stammelement des Objekts
DataTemplatemuss immer einViewCellObjekt sein. - Datentrigger werden in einer Datenvorlage vollständig unterstützt, müssen jedoch eine
DataTypeEigenschaft enthalten, die den Typ der Eigenschaft angibt, der der Trigger zugeordnet ist. DataTemplateSelectorwird auch unterstützt, leitet sie aber abDataTemplateund wird daher direkt derItemTemplateEigenschaft (vs.ItemTemplateSelectorin WPF) zugewiesen.
ItemsControl
Es gibt keine integrierte Entsprechung zu einer ItemsControl in Xamarin.Forms, aber es gibt hier eine benutzerdefinierte für Xamarin.Forms.
Benutzersteuerelemente
In WPF werden s verwendet, UserControlum einen Abschnitt der Benutzeroberfläche bereitzustellen, der ein entsprechendes Verhalten aufweist. In Xamarin.Forms verwenden wir denselben ContentView Zweck. Sowohl die Bindung als auch die Aufnahme in XAML unterstützen.
Navigation
WPF enthält eine selten verwendete Funktion NavigationService , die verwendet werden kann, um ein "browserähnliches" Navigationsfeature bereitzustellen. Die meisten Apps haben dies jedoch nicht gestört und stattdessen verschiedene Window Elemente oder verschiedene Abschnitte des Fensters verwendet, um Daten anzuzeigen.
Auf Telefongeräten sind unterschiedliche Bildschirme häufig die Lösung, sodass Xamarin.Forms Unterstützung für mehrere Formen der Navigation umfasst:
| Navigationsformat | Seitentyp |
|---|---|
| Stapelbasiert (Push/Pop) | NavigationPage |
| Master/Detail | MasterDetailPage |
| Registerkarten | TabbedPage |
| Wischen Sie nach links/rechts | CarouselView |
Dies NavigationPage ist der am häufigsten verwendete Ansatz, und jede Seite verfügt über eine Navigation Eigenschaft, die verwendet werden kann, um Seiten auf und aus dem Navigationsstapel zu verschieben oder zu deaktivieren. Dies entspricht dem in WPF am ehesten NavigationService gefundenen.
URL-Navigation
WPF ist eine desktoporientierte Technologie und kann Befehlszeilenparameter für das direkte Startverhalten akzeptieren. Xamarin.Forms kann deep URL-Verknüpfungen verwenden, um zu einer Seite beim Start zu springen.