Konfigurowanie projektów systemu Windows
Dodawanie nowych projektów systemu Windows do istniejącego Xamarin.Forms rozwiązania
Starsze Xamarin.Forms rozwiązania (lub utworzone w systemie macOS) nie będą miały projektów aplikacji platformy platforma uniwersalna systemu Windows (UWP). W związku z tym należy ręcznie dodać projekt platformy UWP, aby utworzyć aplikację systemu Windows 10 (UWP).
Dodawanie aplikacji platforma uniwersalna systemu Windows
Program Visual Studio 2019 w systemie Windows 10 jest zalecany do tworzenia aplikacji platformy UWP. Aby uzyskać więcej informacji na temat platforma uniwersalna systemu Windows, zobacz Wprowadzenie do platforma uniwersalna systemu Windows.
Platforma UWP jest dostępna w wersji Xamarin.Forms 2.1 lub nowszej, a Xamarin.Formsplatforma .Mapy jest obsługiwana w wersji Xamarin.Forms 2.2 lub nowszej.
Zapoznaj się z sekcją rozwiązywania problemów, aby uzyskać przydatne porady.
Postępuj zgodnie z tymi instrukcjami, aby dodać aplikację platformy uniwersalnej systemu Windows, która będzie działać na telefonach z systemem Windows 10, tabletach i komputerach stacjonarnych:
1. Kliknij rozwiązanie prawym przyciskiem myszy i wybierz polecenie Dodaj > nowy projekt... i dodaj projekt Pusta aplikacja (uniwersalny system Windows):
2. W oknie dialogowym Nowy projekt platforma uniwersalna systemu Windows wybierz minimalną i docelową wersję systemu Windows 10 uruchomioną przez aplikację:
3. Kliknij prawym przyciskiem myszy projekt platformy UWP i wybierz polecenie Zarządzaj pakietami NuGet... i dodaj Xamarin.Forms pakiet. Upewnij się, że inne projekty w rozwiązaniu są również aktualizowane do tej samej wersji Xamarin.Forms pakietu.
4. Upewnij się, że nowy projekt platformy UWP zostanie utworzony w oknie Build > Configuration Manager (prawdopodobnie nie nastąpi to domyślnie). Zaznacz pola Kompiluj i Wdróż dla projektu Universal:
5. Kliknij prawym przyciskiem myszy projekt i wybierz pozycję Dodaj > odwołanie i utwórz odwołanie do Xamarin.Forms projektu aplikacji (.NET Standard lub Shared Project).
6. W projekcie platformy UWP zmodyfikuj App.xaml.cs , aby uwzględnić Init
wywołanie metody wewnątrz OnLaunched
metody w wierszu 52:
// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter
7. W projekcie platformy UWP zmodyfikuj plik MainPage.xaml , usuwając element zawarty Grid
w elemecie Page
.
8. W pliku MainPage.xaml dodaj nowy xmlns
wpis dla Xamarin.Forms.Platform.UWP
elementu :
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
9. W pliku MainPage.xaml zmień element główny <Page
na <forms:WindowsPage
:
<forms:WindowsPage
...
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...
</forms:WindowsPage>
10. W projekcie platformy UWP zmodyfikuj MainPage.xaml.cs, aby usunąć : Page
specyfikator dziedziczenia dla nazwy klasy (ponieważ będzie ona teraz dziedziczyć z WindowsPage
powodu zmiany wprowadzonej w poprzednim kroku):
public sealed partial class MainPage // REMOVE ": Page"
11. W MainPage.xaml.cs dodaj wywołanie LoadApplication
w konstruktorze MainPage
, aby uruchomić aplikację Xamarin.Forms :
// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());
Uwaga
Argumentem LoadApplication
metody jest Xamarin.Forms.Application
wystąpienie zdefiniowane w projekcie .NET Standard.
12. Dodaj wszystkie zasoby lokalne (np. pliki obrazów) z istniejących projektów platformy, które są wymagane.
Rozwiązywanie problemów
"Wyjątek wywołania docelowego" podczas korzystania z "Kompiluj z łańcuchem narzędzi platformy .NET Native"
Jeśli aplikacja platformy UWP odwołuje się do wielu zestawów (na przykład bibliotek kontrolek innych firm lub sama aplikacja jest podzielona na wiele bibliotek), Xamarin.Forms może nie być w stanie załadować obiektów z tych zestawów (takich jak niestandardowe programy renderujące).
Taka sytuacja może wystąpić w przypadku użycia łańcucha narzędzi Kompiluj z platformą .NET Native, który jest opcją dla aplikacji platformy UWP w oknie Właściwości > Kompiluj > ogólne dla projektu.
Można rozwiązać ten problem przy użyciu przeciążenia specyficznego Forms.Init
dla platformy UWP wywołania w App.xaml.cs , jak pokazano w poniższym kodzie (należy zastąpić ClassInOtherAssembly
rzeczywistą klasą, do której odwołuje się kod):
// You'll need to add `using System.Reflection;`
List<Assembly> assembliesToInclude = new List<Assembly>();
// Now, add in all the assemblies your app uses
assembliesToInclude.Add(typeof (ClassInOtherAssembly).GetTypeInfo().Assembly);
// Also do this for all your other 3rd party libraries
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
// replaces Xamarin.Forms.Forms.Init(e);
Dodaj wpis dla każdego zestawu dodanego jako odwołanie w Eksplorator rozwiązań za pomocą bezpośredniego odwołania lub narzędzia NuGet.
Kompilacja usług Dependency Services i .NET Native
Kompilacje wydania korzystające z kompilacji programu .NET Native mogą nie rozwiązać problemów z usługami zależności zdefiniowanymi poza głównym plikiem wykonywalnym aplikacji (na przykład w osobnym projekcie lub bibliotece).
Użyj metody , DependencyService.Register<T>()
aby ręcznie zarejestrować klasy usług zależności. Na podstawie powyższego przykładu dodaj metodę register w następujący sposób:
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Xamarin.Forms.DependencyService.Register<ClassInOtherAssembly>(); // add this