Was ist neu in .NET MAUI für .NET 8?
Der Fokus von .NET MAUI in .NET 8 liegt auf der Qualität. In .NET 8 wurden 1618 Pullanforderungen zusammengeführt und 689 Probleme geschlossen. Dazu gehören Änderungen des .NET MAUI-Teams sowie der .NET MAUI-Community. Diese Änderungen sollten zu einer erheblichen Qualitätssteigerung in .NET 8 führen.
Wichtig
Aufgrund der Arbeit mit zugrundeliegenden externen Abhängigkeiten, wie Xcode oder Android SDK Tools, unterscheidet sich die .NET Multiplatform App UI (.NET MAUI) Support Policy von der .NET und .NET Core Support Policy. Weitere Informationen finden Sie unter .NET MAUI Support Policy.
In .NET 8 wird .NET MAUI als .NET-Workload und als mehrere NuGet-Pakete ausgeliefert. Der Vorteil dieses Ansatzes besteht darin, dass Sie Ihre Projekte einfach an bestimmte Versionen anheften können, während Sie gleichzeitig eine Vorschau auf unveröffentlichte oder experimentelle Builds erhalten. Wenn Sie ein neues .NET MAUI-Projekt erstellen, werden die erforderlichen NuGet-Pakete automatisch zum Projekt hinzugefügt.
Dieser Artikel listet die neuen Funktionen von .NET MAUI für .NET 8 auf und enthält Links zu detaillierteren Informationen zu den einzelnen Funktionen.
Informationen zu den Neuerungen in .NET 8 finden Sie unter Neuheiten in .NET 8.
Neue Funktionen
Während der Schwerpunkt dieser Version von .NET MAUI auf der Qualität liegt, gibt es auch einige neue Funktionen, die neue Szenarien in Ihren Apps ermöglichen.
Steuerelemente
- Steuerelemente, die die Texteingabe unterstützen, erhalten Erweiterungsmethoden, die das Ein- und Ausblenden der Bildschirmtastatur unterstützen. Weitere Informationen finden Sie unter Ausblenden und Einblenden der Bildschirmtastatur.
- Die ContentPage-Klasse erhält eine HideSoftInputOnTapped-Eigenschaft, die angibt, ob das Antippen einer beliebigen Stelle auf der Seite dazu führt, dass die Bildschirmtastatur ausgeblendet wird, wenn sie sichtbar ist. Für weitere Informationen siehe ContentPage.
- BlazorWebView erhält eine StartPath-Eigenschaft, eine TryDispatchAsync-Methode und erweiterte Protokollierungsmöglichkeiten. Weitere Informationen finden Sie unter Hosting einer Blazor-Web-App in einer .NET MAUI-App mit BlazorWebView.
- WebView erhält eine UserAgent-Eigenschaft. Für weitere Informationen siehe WebView.
- Die Inline-Medienwiedergabe von HTML5-Videos, einschließlich Autoplay und Bild-im-Bild, wurde standardmäßig für WebView auf iOS aktiviert. Weitere Informationen finden Sie unter Einstellungen für die Medienwiedergabe auf iOS und Mac Catalyst festlegen.
- Die
Grid.Add
-Überladung, die 5 Argumente akzeptiert, wurde wieder zu .NET MAUI hinzugefügt. Diese Methode ist jedoch veraltet und dient nur noch zur Unterstützung der Migration von Xamarin.Forms. - Grid erhält eine AddWithSpan-Erweiterungsmethode, die der Grid eine Ansicht in der angegebenen Zeile und Spalte mit den angegebenen Zeilen- und Spaltenabständen hinzufügt.
Desktop
- Menüleisteneinträge und Kontextmenüeinträge können über Tastenkombinationen aufgerufen werden, die als Tastaturkürzel bekannt sind. Weitere Informationen finden Sie unter Tastaturkürzel.
- Windows-Apps können als ungepackte Apps veröffentlicht werden. Weitere Informationen finden Sie unter Veröffentlichen einer ungepackten .NET MAUI-App für Windows mit der CLI.
Gestenerkennung
- PointerGestureRecognizer erhält PointerPressedCommand-, PointerPressedCommandParameter-, PointerReleasedCommand-, PointerReleasedCommandParameter-Eigenschaften sowie PointerPressed- und PointerReleased- Ereignisse. Weitere Informationen finden Sie unter Erkennen einer Zeigergeste.
- Das PointerEventArgs-Objekt, das die von der PointerGestureRecognizer-Klasse ausgelösten Zeigerereignisse begleitet, erhält eine PlatformArgs-Eigenschaft vom Typ PlatformPointerEventArgs. Diese Eigenschaft ermöglicht den Zugriff auf die plattformspezifischen Argumente für ein Zeigergestenereignis. Weitere Informationen finden Sie unter Erkennen einer Zeigergeste.
- Die DragStartingEventArgs-, DragEventArgs-, DropEventArgs- und DropCompletedEventArgs-Objekte, die die Drag-and-Drop-Gestenereignisse begleiten, erhalten jeweils eine
PlatformArgs
-Eigenschaft. Diese Eigenschaft ermöglicht den Zugriff auf die plattformspezifischen Argumente für ein Drag- oder Drop-Ereignis. Weitere Informationen finden Sie unter Erkennen einer Drag-and-Drop-Geste. - Die Position, an der eine Drag- oder Drop-Geste stattgefunden hat, kann durch den Aufruf der Methode GetPosition für ein DragEventArgs-, DragStartingEventArgs- oder DropEventArgs-Objekt ermittelt werden. Weitere Informationen finden Sie unter Erkennen einer Drag-and-Drop-Geste.
- Die Klasse TapGestureRecognizer erhält die Fähigkeit, sekundäre Antippen auf Android zu behandeln. Weitere Informationen finden Sie unter Erkennen einer Tippgeste.
Navigation
- Die Shell-Navigation erhält eine GoToAsync-Überladung, die es ermöglicht, einmalige Navigationsdaten, die nach der Navigation gelöscht werden, als ShellNavigationQueryParameters-Objekt zu übergeben. Weitere Informationen finden Sie unter Objektbasierte Navigationsdaten zur einmaligen Verwendung übergeben.
Plattformintegration
- Die Klasse Geolocation kann auf Standortänderungen achten, wenn eine App im Vordergrund ist. Weitere Informationen finden Sie unter Auf Speicherortwechsel achten.
- Flashlight erhält eine IsSupportedAsync-Methode, die feststellt, ob eine Taschenlampe auf dem Gerät verfügbar ist. Weitere Informationen finden Sie unter Flashlight.
- SensorSpeed-Intervalle wurden für alle Plattformen vereinheitlicht. Weitere Informationen finden Sie unter Zugriff auf Gerätesensoren.
- Die Klasse Permissions erhält die Berechtigung Permissions.Bluetooth, eine Android-12-Berechtigung für die Suche nach Bluetooth-Geräten, die Erkennbarkeit des aktuellen Geräts für andere Bluetooth-Geräte und die Kommunikation mit bereits gepaarten Bluetooth-Geräten. Weitere Informationen finden Sie unter Berechtigungen.
- Die Klasse Permissions erhält die Berechtigung Permissions.NearbyWifiDevices, eine Android-13-Berechtigung für den Zugriff auf WiFi-Geräte in der Nähe. Weitere Informationen finden Sie unter Berechtigungen.
XAML
- Das
x:ClassModifier
-Attribut kann bei XAML-Klassen angegeben werden, um die Zugriffsebene für eine generierte Klasse in einer Assembly zu steuern. Für weitere Informationen, siehe Klassenmodifikatoren. - Ressourcen, die in einem ResourceDictionary definiert sind, können auch in einem
AppThemeBinding
mit derDynamicResource
-Markuperweiterung verwendet werden. Weitere Informationen finden Sie unter Themenressourcen definieren und verbrauchen. - Color ist
ContentProperty
der SolidColorBrush-Klasse und muss daher nicht explizit von XAML aus gesetzt werden.
Problembehandlung
- Zur Fehlersuche kann die Ressourcengenerierung deaktiviert werden. Weitere Informationen finden Sie unter Bildpaketierung deaktivieren, Splashscreen-Paketierung deaktivieren, Schriftpaketierung deaktivieren und Assetdateipaketierung deaktivieren.
- Zur Fehlersuche kann ein leerer Begrüßungsbildschirm erzeugt werden. Weitere Informationen finden Sie unter Erzeugen eines leeren Begrüßungsbildschirms.
- Resizeter prüft auf doppelte Dateinamen von Bildern. Weitere Informationen finden Sie unter Fehler bei doppelten Bilddateinamen.
Verschiedenes
- Die Fensterverwaltung kann von der
App
-Klasse entkoppelt werden. Weitere Informationen finden Sie unter Entkopplung der Fensterverwaltung von der App-Klasse. - Verschiedene Systemschriftarten können in Android-Apps problemlos verwendet werden. Weitere Informationen finden Sie unter Schriften verbrauchen.
- Unter iOS erhält
MauiUIApplicationDelegate
einePerformFetch
-Methode, die über dasiOSLifecycle.PerformFetch
-Delegat außer Kraft gesetzt oder verwendet werden kann. Weitere Informationen finden Sie unter iOS- und Mac Catalyst-Plattformlebenszyklusereignissen.
Abschaffung und Entfernung von Typen
Die folgenden Typen oder Mitglieder sind veraltet:
- ClickGestureRecognizer ist veraltet.
- Die angehängten Eigenschaften
AutomationProperties.Name
,AutomationProperties.HelpText
undAutomationProperties.LabeledBy
sind veraltet. - FocusChangeRequested ist veraltet. Verwenden Sie stattdessen die Methode Focus(), um zu versuchen, den Fokus auf die Ansicht zu setzen.
Die folgenden Typen oder Members wurden entfernt:
- Die Eigenschaft
Application.Properties
und die MethodeApplication.SavePropertiesAsync
wurden entfernt. Um Ihre App-Eigenschaftsdaten zu .NET MAUI zu migrieren, siehe Migrieren von Daten aus dem Xamarin.Forms App-Eigenschaftswörterbuch zu .NET MAUI-Einstellungen. - Die
PhoneDialer.Current
-Eigenschaft wurde entfernt. Verwenden Sie stattdessenPhoneDialer.Default
. OpenGLView
wurde entfernt.
Verhaltensänderungen
Das folgende Verhalten hat sich gegenüber der vorherigen Version geändert:
- Die Verwendung des Map-Steuerelements aus XAML erfordert jetzt die folgende
xmlns
-Namespace-Deklaration:xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
. - Das Zwischenspeichern von Bildern ist unter Android deaktiviert, wenn ein Bild aus einem Stream mit der Methode
ImageSource.FromStream
geladen wird. Dies ist darauf zurückzuführen, dass nicht genügend Daten vorhanden sind, um einen vernünftigen Cache-Schlüssel zu erstellen. - Unter iOS werden Seiten automatisch gescrollt, wenn die Bildschirmtastatur ein Texteingabefeld verdecken würde, sodass sich das Feld über der Bildschirmtastatur befindet. Die
KeyboardAutoManagerScroll.Disconnect
-Methode imMicrosoft.Maui.Platform
-Namespace kann aufgerufen werden, um dieses Standardverhalten zu deaktivieren. DieKeyboardAutoManagerScroll.Connect
-Methode kann aufgerufen werden, um das Verhalten erneut zu aktivieren, nachdem sie deaktiviert wurde. - Die Art und Weise, wie die Farbe einer Registerkarte in einer Shell-App festgelegt wird, hat sich auf einigen Plattformen geändert. Weitere Informationen finden Sie unter Darstellung von Registerkarten.
- Es ist nicht erforderlich, einen Wert für die
$(ApplicationIdGuid)
Build-Eigenschaft in der Projektdatei Ihrer App anzugeben. Dies liegt daran, dass .NET MAUI Windows-Apps keine GUID mehr als Apps-ID benötigen und stattdessen den Wert der$(ApplicationId)
Build-Eigenschaft als Apps-ID verwenden. Daher wird jetzt auf allen Plattformen dieselbe App-ID im Reverse-Domain-Format verwendet, wie etwa com.mycompany.myapp. - .NET MAUI Mac Catalyst-Apps sind nicht mehr auf 50 Menüelemente in der Menüleiste beschränkt.
- Die
PlatformImage.FromStream
-Methode imMicrosoft.Maui.Graphics
-Namenspace kann jetzt verwendet werden, um Bilder unter Windows zu laden, anstatt dieW2DImageLoadingService
-Klasse zu verwenden. - Unter Android respektieren die Animationen die Animationseinstellungen des Systems. Weitere Informationen finden Sie unter Grundlegende Animation.
Leistung
In .NET MAUI 8 gibt es zahlreiche Leistungsänderungen. Diese Veränderungen lassen sich in 5 Bereiche einteilen:
- Neue Funktionen
- Aufbau und Leistung der inneren Schleife
- Verbesserungen der Leistung oder Größe der App
- Strukturen und
IEquatable
in .NET MAUI - Behebung des Leistungsproblems in
{AppThemeBinding}
- Adressieren von
CA1307
undCA1309
für Leistung - Adressieren von
CA1311
für Leistung - Unbenutztes
ViewAttachedToWindow
-Ereignis auf Android entfernen - Nicht benötigte
System.Reflection
für{Binding}
entfernen StringComparer.Ordinal
fürDictionary
undHashSet
verwenden- Reduzieren vonJava-Interop in
MauiDrawable
auf Android - Verbesserung der Layout-Leistung von
Label
auf Android - Reduzierung von Java-Interop-Aufrufen für Steuerelemente in .NET MAUI
- Verbesserung der Leistung von
Entry.MaxLength
auf Android - Verbesserung der Speichernutzung von
CollectionView
unter Windows - Verwenden von
UnmanagedCallersOnlyAttribute
auf Apple-Plattformen - Schnelleres Java-Interop für Strings auf Android
- Schnellere Java-Interop für C#-Ereignisse auf Android
- Verwendung von Funktionszeigern für JNI
- Entfernt
Xamarin.AndroidX.Legacy.Support.V4
- Deduplizierung von Generika unter iOS und macOS
- Behebung der
System.Linq.Expressions
Implementierung auf iOS-ähnlichen Plattformen - Setzen Sie
DynamicCodeSupport=false
für iOS und Catalyst
- Strukturen und
- Arbeitsspeicherverluste
- Tooling und Dokumentation
Weitere Informationen finden Sie unter .NET 8 Leistungsverbesserungen in .NET MAUI.
Upgrade von .NET 7 auf .NET 8
Um Ihre Projekte von .NET 7 auf .NET 8 zu aktualisieren, installieren Sie .NET 8 und den .NET MAUI Workload mit Visual Studio 17.8+ oder mit dem Standalone-Installer und dem Befehl dotnet workload install maui
.
Öffnen Sie dann Ihre .csproj-Datei und ändern Sie die Target Framework Monikers (TFMs) von 7 auf 8. Wenn Sie eine TFM wie net7.0-ios13.6
verwenden, stellen Sie sicher, dass sie der Plattformversion entspricht, oder entfernen Sie sie ganz. Das folgende Beispiel zeigt die TFMs für ein .NET 7-Projekt:
<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>
Das folgende Beispiel zeigt die TFMs für ein .NET 8-Projekt:
<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>
Explizite Paketverweise sollten auch zu Ihrer .csproj-Datei für die folgenden .NET MAUI NuGet-Pakete hinzugefügt werden:
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
Die Variable $(MauiVersion)
wird von der Version von .NET MAUI referenziert, die Sie installiert haben. Sie können dies außer Kraft setzen, indem Sie die $(MauiVersion)
-Build-Eigenschaft zu Ihrer .csproj-Datei hinzufügen:
<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>
Dies kann nützlich sein, wenn man Ad-hoc-Builds aus dem nightly feed oder aus Pull-Requests heruntergeladene Builds verwendet.
Darüber hinaus kann die $(ApplicationIdGuid)
Build-Eigenschaft aus der .csproj-Datei in .NET 8 entfernt werden. Weitere Informationen finden Sie unter Verhaltensänderungen.
Bevor Sie Ihre aktualisierte Anwendung zum ersten Mal erstellen, löschen Sie die Ordner bin
und obj
.
Hinweis
Die Projektvorlage für eine .NET MAUI-App in .NET 8 aktiviert den löschbaren Kontext für das Projekt mit der $(Nullable)
-Build-Eigenschaft. Für weitere Informationen, siehe Nullwertfähig.