Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Szablony kontrolek
Platforma WPF obsługuje koncepcję szablonów kontrolek, które udostępniają instrukcje wizualizacji dla kontrolki (Button, ListBoxitp.). Jak wspomniano powyżej, platforma Xamarin.Forms używa konkretnych klas renderowania dla tej funkcji, które współdziałają z platformą natywną (iOS, Android itp.) w celu wizualizacji kontrolki.
Jednak zestaw narzędzi Xamarin.Forms ma ControlTemplate typ — jest używany do tworzenia motywów Page obiektów. Zawiera on definicję Page elementu, która zapewnia spójną zawartość, ale umożliwia użytkownikowi strony zmianę kolorów, czcionek itp., a nawet dodawanie elementów w celu ich unikatowości w aplikacji.
Typowe zastosowania w tym przypadku to takie elementy jak okna dialogowe uwierzytelniania, monity i udostępnienie ustandaryzowanego wyglądu strony, ale można je dostosować w aplikacji. W ramach tej obsługi jest używanych wiele znanych kontrolek o nazwach WPF:
ContentPageContentViewContentPresenterTemplateBinding
Ważne jest jednak, aby wiedzieć, że nie obsługują one tego samego celu w zestawie narzędzi Xamarin.Forms. Aby uzyskać więcej informacji na temat tej funkcji, zapoznaj się ze stroną dokumentacji.
XAML
Język XAML jest używany jako język znaczników deklaratywnych dla platform WPF i Xamarin.Forms. W większości przypadków składnia jest identyczna — podstawowa różnica polega na obiektach zdefiniowanych/utworzonych przez grafy XAML.
Platforma Xamarin.Forms obsługuje specyfikację XAML 2009. Ułatwia to definiowanie danych, takich jak
strings,ints itp., a także definiowanie typów ogólnych i przekazywanie argumentów do konstruktorów.Obecnie nie ma możliwości dynamicznego ładowania kodu XAML, takiego jak WPF, za pomocą polecenia
XamlReader. Możesz jednak uzyskać tę samą podstawową funkcjonalność za pomocą pakietu NuGet.
Rozszerzenia struktury znaczników
Platforma Xamarin.Forms obsługuje rozszerzanie kodu XAML za pomocą rozszerzeń znaczników, podobnie jak WPF. Poza pudełkiem ma on te same podstawowe bloki konstrukcyjne:
{x:Array}{Binding}{DynamicResource}{x:Null}{x:Static}{StaticResource}{x:Type}
Ponadto zawiera {x:Reference} ona specyfikację XAML 2009 oraz {TemplateBinding} rozszerzenie znaczników, które jest używane do wyspecjalizowanej wersji obsługiwanej ControlTemplate przez platformę Xamarin.Forms.
Ostrzeżenie
Obsługa ControlTemplate nie jest taka sama — mimo że ma taką samą nazwę.
Platforma Xamarin.Forms obsługuje również niestandardowe rozszerzenia znaczników — ale implementacja jest nieco inna. W WPF musisz pochodzić z MarkupExtension — abstrakcyjnej klasy bazowej. W zestawie narzędzi Xamarin.Forms jest on zastępowany interfejsem IMarkupExtension lub IMarkupExtension<T> jest bardziej elastyczny.
Podobnie jak WPF, pojedyncza ProvideValue wymagana metoda jest metodą zwracania wartości z rozszerzenia znaczników.
Wiązanie infrastruktury
Jedną z podstawowych koncepcji przenoszonych jest infrastruktura powiązania danych w celu połączenia właściwości wizualizacji z właściwościami danych platformy .NET. Umożliwia to wzorce architektury, takie jak MVVM. Podstawowy projekt jest identyczny — istnieje powiązana klasa bazowa BindableObject, w WPF jest to klasa DependencyObject . Ta klasa bazowa jest używana jako główny obiekt nadrzędny dla wszystkich obiektów, które będą uczestniczyć jako obiekty docelowe w powiązaniu danych. Klasy pochodne uwidaczniają następnie obiekty BindableProperty , które działają jako magazyn zapasowy dla wartości właściwości (są one zdefiniowane jako obiekty DependencyProperty w WPF).
Definiowanie właściwości możliwych do powiązania
Definicja właściwości możliwej do powiązania na platformie Xamarin.Forms jest taka sama jak WPF:
- Obiekt musi pochodzić z klasy
BindableObject. - Aby zdefiniować klucz magazynu zapasowego dla właściwości, musi istnieć publiczne pole statyczne typu
BindablePropertyzadeklarowane. - Powinna istnieć otoka właściwości wystąpienia publicznego, która używa
GetValueelementu i do pobierania iSetValuezmieniania wartości właściwości.
Pełny przykład można znaleźć w temacie Bindable Properties in Xamarin.Forms (Właściwości możliwe do powiązania na platformie Xamarin.Forms).
Dołączone właściwości
Dołączone właściwości są podzbiorem właściwości możliwej do powiązania i działają tak samo jak w WPF. Podstawową różnicą jest to, że otoka właściwości została pominięta w tym przypadku i zastąpiona zestawem statycznych metod get/set w klasie będącej właścicielem. Aby uzyskać więcej informacji, zobacz Dołączone właściwości na platformie Xamarin.Forms .
Korzystanie z aparatu powiązania
Proces korzystania z aparatu powiązania jest taki sam jak w WPF. Można go używać w kodzie, tworząc Binding obiekt powiązany z obiektem źródłowym (dowolnym typem platformy .NET) i opcjonalną wartością właściwości (jeśli pominięto, traktuje obiekt źródłowy jako samą właściwość — podobnie jak WPF). Następnie można użyć polecenia SetBinding w dowolnym BindableObject celu, aby skojarzyć powiązanie z elementem BindableProperty.
Alternatywnie można zdefiniować relację powiązania w języku XAML przy użyciu elementu BindingExtension. Ma te same wartości podstawowe co rozszerzenie w WPF.
Obsługa powiązań i aparat są bardziej podobne do implementacji silverlight niż WPF. Istnieje kilka brakujących funkcji, które nie zostały zaimplementowane na platformie Xamarin.Forms:
- Brak obsługi następujących funkcji w powiązaniach:
- BindingGroupName
- BindsDirectlyToSource
- IsAsync
- MultiBinding
- NotifyOnSourceUpdated
- NotifyOnTargetUpdated
- NotifyOnValidationError
- UpdateSourceTrigger
- UpdateSourceExceptionFilter
- ValidatesOnDataErrors
- ValidatesOnExceptions
- Kolekcja ValidationRules
- XPath
- XmlNamespaceManager
Źródło względne
Nie ma obsługi RelativeSource powiązań. W WPF umożliwiają one powiązanie z innymi elementami wizualnymi zdefiniowanymi w języku XAML. W środowisku Xamarin.Forms tę samą funkcję można osiągnąć przy użyciu {x:Reference} rozszerzenia znaczników. Załóżmy na przykład, że mamy kontrolkę o nazwie "otherControl", która ma właściwość Text, możemy powiązać z nią w następujący sposób:
WPF
Text={Binding RelativeSource={RelativeSource otherControl}, Path=Text}
Xamarin.Forms
Text={Binding Source={x:Reference otherControl}, Path=Text}
Tej samej funkcji można używać.{RelativeSource Self} Nie ma jednak obsługi lokalizowania przodków według typu ({RelativeSource FindAncestor}).
Kontekst powiązania
W WPF można zdefiniować DataContext wartość właściwości, która reprents domyślne źródło powiązania. Jeśli źródło powiązania nie jest zdefiniowane, ta wartość właściwości jest używana. Wartość jest dziedziczona w dół drzewa wizualnego, co pozwala na zdefiniowanie go na wyższym poziomie, a następnie używane przez elementy podrzędne.
W zestawie narzędzi Xamarin.Forms ta sama funkcja jest dostępna, ale nazwa właściwości to BindingContext.
Konwertery wartości
Konwertery wartości są w pełni obsługiwane w środowisku Xamarin.Forms — podobnie jak WPF. Używany jest ten sam kształt interfejsu, ale zestaw narzędzi Xamarin.Forms ma interfejs zdefiniowany w Xamarin.Forms przestrzeni nazw.
Model-View-ViewModel
Maszyny MVVM są całkowicie obsługiwane zarówno przez platformy WPF, jak i platformę Xamarin.Forms.
WPF zawiera wbudowany element, w RoutedCommand którym czasami jest używany; Zestaw narzędzi Xamarin.Forms nie obsługuje wbudowanych poleceń poza definicją interfejsu ICommand . Możesz dołączyć różne struktury MVVM, aby dodać niezbędne klasy bazowe do zaimplementowania maszyny wirtualnej MVVM.
INotifyPropertyChanged i INotifyCollectionChanged
Oba interfejsy są w pełni obsługiwane w powiązaniach platformy Xamarin.Forms. W przeciwieństwie do wielu platform opartych na języku XAML powiadomienia o zmianie właściwości można zgłaszać w wątkach w tle na platformie Xamarin.Forms (podobnie jak WPF), a aparat powiązania będzie prawidłowo przechodzić do wątku interfejsu użytkownika.
Ponadto, zarówno środowiska obsługują SynchronizationContext , jak i async/await do właściwego marshalingu wątków. WPF zawiera klasę Dispatcher we wszystkich elementach wizualizacji, platforma Xamarin.Forms ma również metodę Device.BeginInvokeOnMainThread statyczną, która może być również używana (chociaż SynchronizationContext jest preferowana do kodowania międzyplatformowego).
- Zestaw narzędzi Xamarin.Forms zawiera element
ObservableCollection<T>, który obsługuje powiadomienia o zmianie kolekcji. - Możesz użyć
BindingBase.EnableCollectionSynchronizationpolecenia , aby włączyć aktualizacje między wątkami dla kolekcji. Interfejs API różni się nieco od odmiany WPF. Sprawdź dokumenty pod kątem szczegółów użycia.
Szablony danych
Szablony danych są obsługiwane na platformie Xamarin.Forms, aby dostosować renderowanie ListView wiersza (komórki). W przeciwieństwie do platformy WPF, która może korzystać z DataTemplatebiblioteki s dla dowolnej kontrolki zorientowanej na zawartość, platforma Xamarin.Forms obecnie używa ich tylko dla programu ListView. Definicję szablonu można zdefiniować w tekście (przypisaną do ItemTemplate właściwości) lub jako zasób w obiekcie ResourceDictionary.
Ponadto nie są one tak elastyczne, jak ich odpowiednik WPF.
- Element główny obiektu
DataTemplatemusi być zawsze obiektemViewCell. - Wyzwalacze danych są w pełni obsługiwane w szablonie danych, ale muszą zawierać właściwość wskazującą
DataTypetyp właściwości, z którą jest skojarzony wyzwalacz. DataTemplateSelectorjest również obsługiwany, ale pochodzi zDataTemplatei dlatego jest po prostu przypisany bezpośrednio doItemTemplatewłaściwości (aItemTemplateSelectorw WPF).
ItemsControl
Nie ma wbudowanego odpowiednika ItemsControl w zestawie narzędzi Xamarin.Forms, ale istnieje niestandardowy element dla zestawu narzędzi Xamarin.Forms dostępny tutaj.
Kontrolki użytkownika
W WPF są używane do udostępniania sekcji interfejsu użytkownika, UserControlktóra ma skojarzone zachowanie. W środowisku Xamarin.Forms używamy elementu ContentView w tym samym celu. Obsługa powiązania i dołączania w języku XAML.
Nawigacja
WPF zawiera rzadko używane, NavigationService które mogą służyć do zapewnienia funkcji nawigacji przypominającej przeglądarkę. Większość aplikacji nie przeszkadzała jednak temu i zamiast tego używała różnych Window elementów lub różnych sekcji okna do wyświetlania danych.
Na urządzeniach telefonicznych różne ekrany są często rozwiązaniem, dlatego platforma Xamarin.Forms obsługuje kilka form nawigacji:
| Styl nawigacji | Typ strony |
|---|---|
| Oparte na stosie (wypychanie/pop) | Strona nawigacji |
| Rekord główny/szczegóły | MasterDetailPage |
| Karty | TabbedPage |
| Szybkie przesunięcie w lewo/w prawo | CarouselView |
Jest NavigationPage to najbardziej typowe podejście, a każda strona ma Navigation właściwość, która może służyć do wypychania lub wyskakujących stron do stosu nawigacji i wyłączania go. Jest to najbliższy odpowiednik znalezionego NavigationService w WPF.
Nawigacja po adresach URL
WPF to technologia zorientowana na komputery i może akceptować parametry wiersza polecenia w celu bezpośredniego zachowania uruchamiania. Zestaw narzędzi Xamarin.Forms może używać bezpośredniego łączenia adresów URL, aby przejść do strony podczas uruchamiania.