Co nowego w programie .NET MAUI dla platformy .NET 8
Głównym celem programu .NET MAUI na platformie .NET 8 jest jakość. Na platformie .NET 8 scalono 1618 żądań ściągnięcia, które zamknęły 689 problemów. Obejmują one zmiany z zespołu .NET MAUI, a także społeczność .NET MAUI. Te zmiany powinny spowodować znaczny wzrost jakości na platformie .NET 8.
Ważne
Ze względu na pracę z podstawowymi zależnościami zewnętrznymi, takimi jak narzędzia Xcode lub Android SDK, zasady obsługi interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) różnią się od zasad obsługi platformy .NET i platformy .NET Core. Aby uzyskać więcej informacji, zobacz Zasady obsługi programu .NET MAUI.
Na platformie .NET 8 program .NET MAUI jest dostarczany jako obciążenie platformy .NET i wiele pakietów NuGet. Zaletą tego podejścia jest możliwość łatwego przypinania projektów do określonych wersji, a także umożliwia łatwe wyświetlanie podglądu nieopublikowanych lub eksperymentalnych kompilacji. Podczas tworzenia nowego projektu .NET MAUI wymagane pakiety NuGet są automatycznie dodawane do projektu.
W tym artykule wymieniono nowe funkcje programu .NET MAUI dla platformy .NET 8 oraz linki do bardziej szczegółowych informacji na temat każdego z nich.
Aby uzyskać informacje o nowościach na platformie .NET 8, zobacz Co nowego na platformie .NET 8.
Nowa funkcjonalność
Chociaż celem tej wersji programu .NET MAUI jest jakość, istnieje również kilka nowych funkcji, które umożliwiają korzystanie z nowych scenariuszy w aplikacjach.
Kontrolki
- Kontrolki, które obsługują metody rozszerzenia wprowadzania tekstu, które obsługują ukrywanie i wyświetlanie miękkiej klawiatury wejściowej. Aby uzyskać więcej informacji, zobacz Ukrywanie i pokazywanie miękkiej klawiatury wejściowej.
- Klasa ContentPage zyskuje HideSoftInputOnTapped właściwość, która wskazuje, czy naciśnięcie dowolnego miejsca na stronie spowoduje ukrycie miękkiej klawiatury wejściowej, jeśli jest ona widoczna. Aby uzyskać więcej informacji, zobacz ContentPage.
- BlazorWebView uzyskuje właściwość, metodę StartPath TryDispatchAsync i ulepszone możliwości rejestrowania. Aby uzyskać więcej informacji, zobacz Hostowanie aplikacji internetowej Platformy Blazor w aplikacji .NET MAUI przy użyciu platformy BlazorWebView.
- WebViewUserAgent zyskuje nieruchomość. Aby uzyskać więcej informacji, zobacz WebView.
- Wbudowane odtwarzanie multimediów wideo HTML5, w tym autoodtwarzanie i obraz na obrazie, zostało domyślnie włączone dla WebView systemu iOS. Aby uzyskać więcej informacji, zobacz Ustawianie preferencji odtwarzania multimediów w systemach iOS i Mac Catalyst.
- Przeciążenie
Grid.Add
akceptujące 5 argumentów zostało dodane z powrotem do interfejsu MAUI platformy .NET. Jednak ta metoda jest przestarzała i jest obecna tylko w celu pomocy w migracjach z platformy Xamarin.Forms. - Grid uzyskuje metodę AddWithSpan rozszerzenia, która dodaje widok do Grid określonego wiersza i kolumny z określonymi zakresami wierszy i kolumn.
Klasyczna
- Elementy paska menu i elementy menu kontekstowego mogą być wywoływane za pomocą skrótów klawiaturowych nazywanych akceleratorami klawiatury. Aby uzyskać więcej informacji, zobacz Akceleratory klawiatury.
- Aplikacje systemu Windows można publikować jako aplikacje rozpakowane. Aby uzyskać więcej informacji, zobacz Publikowanie rozpakowanej aplikacji .NET MAUI dla systemu Windows przy użyciu interfejsu wiersza polecenia.
Rozpoznawanie gestów
- PointerGestureRecognizerzysków PointerPressedCommand, , PointerPressedCommandParameter, PointerReleasedCommandPointerReleasedCommandParameter właściwości i PointerPressed PointerReleased zdarzeń. Aby uzyskać więcej informacji, zobacz Rozpoznawanie gestu wskaźnika.
- Obiekt PointerEventArgs , który towarzyszy zdarzeń wskaźnika zgłoszonych przez PointerGestureRecognizer klasę PlatformArgs , uzyskuje właściwość typu PlatformPointerEventArgs. Ta właściwość zapewnia dostęp do argumentów specyficznych dla platformy dla zdarzenia gestu wskaźnika. Aby uzyskać więcej informacji, zobacz Rozpoznawanie gestu wskaźnika.
- Obiekty DragStartingEventArgs, , DropEventArgsDragEventArgs, i DropCompletedEventArgs towarzyszące zdarzeń gestów przeciągania i upuszczania uzyskują
PlatformArgs
właściwość. Ta właściwość zapewnia dostęp do argumentów specyficznych dla platformy dla zdarzenia przeciągania lub upuszczania. Aby uzyskać więcej informacji, zobacz Rozpoznawanie gestu przeciągania i upuszczania. - Położenie, w którym wystąpił gest przeciągania lub upuszczania, można uzyskać, wywołując metodę GetPosition DragEventArgsw obiekcie , DragStartingEventArgslub DropEventArgs . Aby uzyskać więcej informacji, zobacz Rozpoznawanie gestu przeciągania i upuszczania.
- Klasa TapGestureRecognizer zyskuje możliwość obsługi dodatkowych naciśnięciów w systemie Android. Aby uzyskać więcej informacji, zobacz Rozpoznawanie gestu naciśnięcia.
Nawigacja
- Nawigacja w powłoce zyskuje GoToAsync przeciążenie, które umożliwia przekazywanie danych nawigacji pojedynczego użycia, które są czyszczone po wystąpieniu nawigacji jako ShellNavigationQueryParameters obiekt. Aby uzyskać więcej informacji, zobacz Przekazywanie danych nawigacji opartych na obiektach za pomocą pojedynczego użycia.
Integracja platformy
- Klasa Geolocation może nasłuchiwać zmian lokalizacji, gdy aplikacja znajduje się na pierwszym planie. Aby uzyskać więcej informacji, zobacz Nasłuchiwanie zmian lokalizacji.
- Flashlight uzyskuje metodę IsSupportedAsync , która określa, czy latarka jest dostępna na urządzeniu. Aby uzyskać więcej informacji, zobacz Flashlight.
- SensorSpeed interwały zostały ujednolicone na wszystkich platformach. Aby uzyskać więcej informacji, zobacz Uzyskiwanie dostępu do czujników urządzeń.
- Klasa Permissions uzyskuje Permissions.Bluetooth uprawnienia, które jest uprawnieniem systemu Android 12 do wyszukiwania urządzeń Bluetooth, dzięki czemu bieżące urządzenie jest możliwe do odnalezienia na innych urządzeniach Bluetooth i komunikowanie się z już sparowanymi urządzeniami Bluetooth. Aby uzyskać więcej informacji, zobacz Uprawnienia.
- Klasa Permissions uzyskuje Permissions.NearbyWifiDevices uprawnienie, czyli uprawnienie systemu Android 13 do uzyskiwania dostępu do pobliskich urządzeń Wi-Fi. Aby uzyskać więcej informacji, zobacz Uprawnienia.
XAML
- Atrybut
x:ClassModifier
można określić w klasach XAML, aby kontrolować poziom dostępu dla wygenerowanej klasy w zestawie. Aby uzyskać więcej informacji, zobacz Modyfikatory klas. - Zasoby zdefiniowane w obiekcie ResourceDictionary mogą być również używane w
AppThemeBinding
DynamicResource
rozszerzeniu znaczników. Aby uzyskać więcej informacji, zobacz Definiowanie i używanie zasobów motywu. - Color
ContentProperty
jest klasą SolidColorBrush i dlatego nie musi być jawnie ustawiana z języka XAML.
Rozwiązywanie problemów
- W celach rozwiązywania problemów można wyłączyć generowanie zasobów. Aby uzyskać więcej informacji, zobacz Wyłączanie tworzenia pakietów obrazów, Wyłączanie pakowania ekranu powitalnego, Wyłączanie tworzenia pakietów czcionek i Wyłączanie pakowania plików zasobów.
- W celach rozwiązywania problemów można wygenerować pusty ekran powitalny. Aby uzyskać więcej informacji, zobacz Generowanie pustego ekranu powitalnego.
- Program Resizeter sprawdza zduplikowane nazwy plików obrazów. Aby uzyskać więcej informacji, zobacz Duplikowanie błędów nazwy pliku obrazu.
Różne
- Zarządzanie oknami można rozdzielić z
App
klasy . Aby uzyskać więcej informacji, zobacz Zarządzanie oknami rozdzielania w klasie App. - Kilka czcionek systemowych można łatwo używać w aplikacjach systemu Android. Aby uzyskać więcej informacji, zobacz Korzystanie z czcionek.
- W systemie iOS uzyskuje metodę
PerformFetch
,MauiUIApplicationDelegate
która może zostać zastąpiona lub zużyta za pośrednictwem delegataiOSLifecycle.PerformFetch
. Aby uzyskać więcej informacji, zobacz Zdarzenia cyklu życia platformy iOS i Mac Catalyst.
Usuwanie i wycofywanie typów
Następujące typy lub elementy członkowskie zostały przestarzałe:
- ClickGestureRecognizer został przestarzały.
- Właściwości
AutomationProperties.Name
,AutomationProperties.HelpText
iAutomationProperties.LabeledBy
dołączone zostały przestarzałe. - Element FocusChangeRequested został przestarzały. Zamiast tego użyj Focus() metody , aby spróbować ustawić fokus na widoku.
Usunięto następujące typy lub elementy członkowskie:
- Właściwość
Application.Properties
iApplication.SavePropertiesAsync
metoda zostały usunięte. Aby przeprowadzić migrację danych właściwości aplikacji do interfejsu MAUI platformy .NET, zobacz Migrowanie danych ze słownika właściwości aplikacji platformy Xamarin.Forms do preferencji programu .NET MAUI. - Właściwość została usunięta
PhoneDialer.Current
. Użycie w zamian parametruPhoneDialer.Default
. OpenGLView
został usunięty.
Zmiany zachowania
Następujące zachowanie zostało zmienione z poprzedniej wersji:
- Użycie kontrolki Map z języka XAML wymaga teraz następującej
xmlns
deklaracji przestrzeni nazw:xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
. - Buforowanie obrazów jest wyłączone w systemie Android podczas ładowania obrazu ze strumienia za pomocą
ImageSource.FromStream
metody . Wynika to z braku danych, z których można utworzyć rozsądny klucz pamięci podręcznej. - W systemie iOS strony są automatycznie przewijane, gdy klawiatura wprowadzania nietrwałego obejmie pole wprowadzania tekstu, tak aby pole było powyżej klawiatury nietrwałej wprowadzania. Metodę
KeyboardAutoManagerScroll.Disconnect
wMicrosoft.Maui.Platform
przestrzeni nazw można wywołać, aby wyłączyć to domyślne zachowanie. MetodęKeyboardAutoManagerScroll.Connect
można wywołać, aby ponownie włączyć zachowanie po jej wyłączeniu. - Sposób ustawiania koloru karty w aplikacji powłoki zmienił się na niektórych platformach. Aby uzyskać więcej informacji, zobacz Wygląd karty.
- Nie jest wymagane określenie wartości właściwości
$(ApplicationIdGuid)
kompilacji w pliku projektu aplikacji. Dzieje się tak, ponieważ aplikacje systemu Windows .NET MAUI nie wymagają już identyfikatora GUID jako identyfikatora aplikacji, a zamiast tego użyj wartości$(ApplicationId)
właściwości kompilacji jako identyfikatora aplikacji. W związku z tym ten sam identyfikator aplikacji w formacie odwrotnej domeny jest teraz używany na wszystkich platformach, takich jak com.mycompany.myapp. - Aplikacje .NET MAUI Mac Catalyst nie są już ograniczone do 50 elementów menu na pasku menu.
- Metoda
PlatformImage.FromStream
wMicrosoft.Maui.Graphics
przestrzeni nazw może teraz służyć do ładowania obrazów w systemie Windows zamiast używaniaW2DImageLoadingService
klasy . - W systemie Android animacje przestrzegają ustawień animacji systemu. Aby uzyskać więcej informacji, zobacz Animacja podstawowa.
Wydajność
Istnieje wiele zmian wydajności w programie .NET MAUI 8. Te zmiany można podzielić na pięć obszarów:
- Nowe funkcje
- Wydajność kompilacji i pętli wewnętrznej
- Ulepszenia dotyczące wydajności lub rozmiaru aplikacji
- Struktury i
IEquatable
w programie .NET MAUI - Rozwiązywanie problemu z wydajnością w programie
{AppThemeBinding}
- Adres
CA1307
iCA1309
wydajność - Adres
CA1311
pod kątem wydajności - Usuwanie nieużywanego
ViewAttachedToWindow
zdarzenia w systemie Android - Usuń niepotrzebne
System.Reflection
{Binding}
- Używanie
StringComparer.Ordinal
dla iDictionary
HashSet
- Zmniejszanie międzyoperajności języka Java w
MauiDrawable
systemie Android - Zwiększanie wydajności
Label
układu w systemie Android - Zmniejsz liczbę wywołań międzyoperacji języka Java dla kontrolek na platformie .NET MAUI
- Zwiększanie wydajności
Entry.MaxLength
w systemie Android - Zwiększanie użycia pamięci w
CollectionView
systemie Windows - Używanie
UnmanagedCallersOnlyAttribute
na platformach firmy Apple - Szybsze współdziałanie języka Java dla ciągów w systemie Android
- Szybsze współdziałanie języka Java dla zdarzeń języka C# w systemie Android
- Używanie wskaźników funkcji dla interfejsu JNI
- Usunięte
Xamarin.AndroidX.Legacy.Support.V4
- Deduplikacja typów ogólnych w systemach iOS i macOS
- Naprawianie
System.Linq.Expressions
implementacji na platformach podobnych do systemu iOS - Zestaw
DynamicCodeSupport=false
dla systemów iOS i Catalyst
- Struktury i
- Przecieki pamięci
- Narzędzia i dokumentacja
Aby uzyskać więcej informacji, zobacz .NET 8 Performance Improvements in .NET MAUI (Ulepszenia wydajności platformy .NET 8 w programie .NET MAUI).
Uaktualnianie z platformy .NET 7 do platformy .NET 8
Aby uaktualnić projekty z platformy .NET 7 do platformy .NET 8, zainstaluj środowisko .NET 8 i pakiet roboczy .NET MAUI za pomocą programu Visual Studio 17.8 lub nowszego lub z autonomicznym instalatorem i poleceniem dotnet workload install maui
.
Następnie otwórz plik csproj i zmień program Target Framework Monikers (TFMs) z 7 na 8. Jeśli używasz programu TFM, na net7.0-ios13.6
przykład upewnij się, że jest zgodna z wersją platformy lub całkowicie ją usuń. W poniższym przykładzie przedstawiono programy TFM dla projektu platformy .NET 7:
<TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst;net7.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
W poniższym przykładzie przedstawiono programy TFM dla projektu platformy .NET 8:
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
Jawne odwołania do pakietu należy również dodać do pliku csproj dla następujących pakietów NuGet .NET MAUI:
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
Zmienna $(MauiVersion)
jest przywoływane z zainstalowanej wersji programu .NET MAUI. Możesz to zastąpić, dodając $(MauiVersion)
właściwość kompilacji do pliku csproj :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
<UseMaui>True</UseMaui>
<MauiVersion>8.0.3</MauiVersion>
</PropertyGroup>
</Project>
Może to być przydatne w przypadku korzystania z kompilacji ad hoc z nocnego kanału informacyjnego lub kompilacji pobranych z żądań ściągnięcia.
Ponadto właściwość kompilacji $(ApplicationIdGuid)
można usunąć z pliku csproj na platformie .NET 8. Aby uzyskać więcej informacji, zobacz Zmiany zachowania.
Przed utworzeniem uaktualnionej aplikacji po raz pierwszy usuń bin
foldery i obj
.
Uwaga
Szablon projektu dla aplikacji MAUI platformy .NET na platformie .NET 8 umożliwia kontekst dopuszczalny do wartości null dla projektu z właściwością kompilacji $(Nullable)
. Aby uzyskać więcej informacji, zobacz Dopuszczanie wartości null.