Novinky v .NET MAUI pro .NET 8
Cílem rozhraní .NET MAUI v .NET 8 je kvalita. V .NET 8, 1618 žádosti o přijetí změn byly sloučeny, které zavřely problémy 689. To zahrnuje změny od týmu .NET MAUI i komunity .NET MAUI. Tyto změny by měly vést k významnému zvýšení kvality v .NET 8.
Důležité
Vzhledem k tomu, že pracujete s podkladovými externími závislostmi, jako jsou nástroje Xcode nebo Android SDK, se zásady podpory pro víceplatformní uživatelské rozhraní .NET MAUI (.NET MAUI) liší od zásad podpory .NET a .NET Core. Další informace najdete v tématu Zásady podpory .NET MAUI.
V .NET 8 se .NET MAUI dodává jako úloha .NET a několik balíčků NuGet. Výhodou tohoto přístupu je, že umožňuje snadno připnout projekty na konkrétní verze a zároveň vám umožní snadno zobrazit náhled nerelevidovaných nebo experimentálních buildů. Když vytvoříte nový projekt .NET MAUI, do projektu se automaticky přidají požadované balíčky NuGet.
Tento článek obsahuje seznam nových funkcí .NET MAUI pro .NET 8 a obsahuje odkazy na podrobnější informace o jednotlivých.
Informace o novinkách v .NET 8 najdete v tématu Co je nového v .NET 8.
Nové funkce
I když je tato verze rozhraní .NET MAUI zaměřená na kvalitu, existuje také několik nových funkcí, které umožňují nové scénáře ve vašich aplikacích.
Ovládací prvky
- Ovládací prvky, které podporují zadávání textu, získávají rozšiřující metody, které podporují skrytí a zobrazení klávesnice s měkkým vstupem. Další informace naleznete v tématu Skrytí a zobrazení klávesnice s měkkým vstupem.
- Třída ContentPage získá HideSoftInputOnTapped vlastnost, která označuje, zda klepnutí kamkoliv na stránce způsobí skrytí klávesnice s měkkým vstupem, pokud je viditelná. Další informace naleznete v tématu ContentPage.
- BlazorWebViewStartPath získá vlastnost, metodu TryDispatchAsync a vylepšené možnosti protokolování. Další informace najdete v tématu Hostování webové aplikace Blazor v aplikaci .NET MAUI pomocí BlazorWebView.
- WebViewUserAgent získá nemovitost. Další informace naleznete v tématu WebView.
- U videa HTML5, včetně automatického přehrávání a obrázku na obrázku, bylo ve výchozím nastavení WebView pro iOS povolené vložené přehrávání médií. Další informace naleznete v tématu Nastavení předvoleb přehrávání médií v systémech iOS a Mac Catalyst.
- Přetížení
Grid.Add
, které přijímá 5 argumentů, bylo přidáno zpět do .NET MAUI. Tato metoda je však zastaralá a je k dispozici pouze pro podporu migrací z Xamarin.Forms. - Grid získá rozšiřující metodu AddWithSpan , která přidá zobrazení do Grid zadaného řádku a sloupce se zadaným řádkem a sloupcem.
Desktop
- Položky řádku nabídek a položky místní nabídky je možné vyvolat pomocí klávesových zkratek označovaných jako klávesové zkratky. Další informace naleznete v tématu Klávesové zkratky.
- Aplikace pro Windows je možné publikovat jako rozbalené aplikace. Další informace najdete v tématu Publikování rozbalené aplikace .NET MAUI pro Windows pomocí rozhraní příkazového řádku.
Rozpoznávání gest
- PointerGestureRecognizerzisky PointerPressedCommand, , PointerPressedCommandParameter, PointerReleasedCommandPointerReleasedCommandParameter vlastnosti a PointerPressed PointerReleased události. Další informace naleznete v tématu Rozpoznávání gesta ukazatele.
- Objekt PointerEventArgs , který doprovází události ukazatele vyvolané PointerGestureRecognizer třídou získá PlatformArgs vlastnost typu PlatformPointerEventArgs. Tato vlastnost poskytuje přístup k argumentům specifických pro platformu pro událost gest ukazatele. Další informace naleznete v tématu Rozpoznávání gesta ukazatele.
- Události DragStartingEventArgsgest přetažení , DragEventArgs, DropEventArgsa DropCompletedEventArgs objekty, které doprovázejí gesto přetažení, každý získá
PlatformArgs
vlastnost. Tato vlastnost poskytuje přístup k argumentům specifických pro platformu pro událost přetažení. Další informace najdete v tématu Rozpoznávání gesta přetažení. - Umístění, ve kterém došlo k gestu přetažení, lze získat voláním GetPosition metody na DragEventArgs, DragStartingEventArgsnebo DropEventArgs objektu. Další informace najdete v tématu Rozpoznávání gesta přetažení.
- Třída TapGestureRecognizer získá schopnost zpracovávat sekundární klepnutí v Androidu. Další informace najdete v tématu Rozpoznávání gesta klepnutím.
Navigace
- Navigace v prostředí získá GoToAsync přetížení, které umožňuje předat jedno použití navigačních dat, které se vymaže po dokončení navigace, jako ShellNavigationQueryParameters objekt. Další informace najdete v tématu Předání jedno použití objektových navigačních dat.
Integrace platformy
- Třída Geolocation může naslouchat změnám umístění, když je aplikace v popředí. Další informace najdete v tématu Naslouchání změnám polohy.
- Flashlight získá metodu IsSupportedAsync , která určuje, zda je na zařízení k dispozici baterka. Další informace naleznete v tématu Baterka.
- SensorSpeed intervaly byly sjednoceny na všech platformách. Další informace najdete v tématu Přístup k senzorům zařízení.
- Třída Permissions získá Permissions.Bluetooth oprávnění, což je oprávnění Android 12 pro hledání zařízení Bluetooth, aby aktuální zařízení bylo zjistitelné pro jiná zařízení Bluetooth a komunikovala s již spárovanými zařízeními Bluetooth. Další informace najdete v tématu Oprávnění.
- Třída Permissions získá Permissions.NearbyWifiDevices oprávnění, což je oprávnění androidu 13 pro přístup k blízkým zařízením Wi-Fi. Další informace najdete v tématu Oprávnění.
XAML
- Atribut
x:ClassModifier
lze zadat u tříd XAML, aby bylo možné řídit úroveň přístupu pro vygenerovanou třídu v sestavení. Další informace naleznete v tématu Modifikátory tříd. - Prostředky definované v objektu ResourceDictionary
AppThemeBinding
můžou být také využity v rozšířeníDynamicResource
značek. Další informace najdete v tématu Definování a využívání prostředků motivu. - Color
ContentProperty
je třídaSolidColorBrush, a proto nemusí být explicitně nastavena z XAML.
Řešení problému
- Pro účely řešení potíží je možné zakázat generování prostředků. Další informace najdete v tématu Zakázání balení obrázků, zakázání balení úvodní obrazovky, zakázání balení písem a zakázání balení souborů assetu.
- Pro účely řešení potíží je možné vygenerovat prázdnou úvodní obrazovku. Další informace naleznete v tématu Vygenerování prázdné úvodní obrazovky.
- Nástroj pro změnu velikosti kontroluje duplicitní názvy souborů obrázků. Další informace naleznete v tématu Duplicitní chyby názvu souboru obrázku.
Různé
- Správu oken je možné oddělit od
App
třídy. Další informace naleznete v tématu Oddělení správy oken od třídy aplikace. - V aplikacích pro Android je možné snadno využívat několik systémových písem. Další informace najdete v tématu Využívání písem.
- V iOSu získá metodu
PerformFetch
,MauiUIApplicationDelegate
kterou lze přepsat nebo využívat prostřednictvím delegátaiOSLifecycle.PerformFetch
. Další informace najdete v tématu události životního cyklu platformy iOS a Mac Catalyst.
Vyřazení a odebrání typu
Následující typy nebo členové jsou zastaralé:
- ClickGestureRecognizer už je zastaralý.
- Vlastnosti
AutomationProperties.Name
,AutomationProperties.HelpText
aAutomationProperties.LabeledBy
připojené jsou zastaralé. - Tato FocusChangeRequested možnost je zastaralá. Místo toho se pomocí Focus() metody pokusíte nastavit fokus na zobrazení.
Byly odebrány následující typy nebo členy:
- Vlastnost
Application.Properties
aApplication.SavePropertiesAsync
metoda byly odebrány. Pokud chcete migrovat data vlastností aplikace do .NET MAUI, přečtěte si téma Migrace dat ze slovníku vlastností aplikace Xamarin.Forms do předvoleb .NET MAUI. - Vlastnost
PhoneDialer.Current
byla odebrána. Místo toho použijtePhoneDialer.Default
. OpenGLView
byla odebrána.
Změny chování
Z předchozí verze se změnilo následující chování:
- Map Použití ovládacího prvku z XAML nyní vyžaduje následující
xmlns
deklaraci oboru názvů:xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
. - Ukládání obrázků do mezipaměti je v Androidu zakázané při načítání obrázku ze streamu pomocí
ImageSource.FromStream
metody. Důvodem je nedostatek dat, ze kterých se má vytvořit rozumný klíč mezipaměti. - V iOSu se stránky automaticky posouvají, když klávesnice pro měkký vstup pokryje pole pro zadávání textu, aby pole bylo nad klávesnicí pro měkký vstup. Metodu
KeyboardAutoManagerScroll.Disconnect
Microsoft.Maui.Platform
v oboru názvů lze volat, aby se zakázalo toto výchozí chování. MetoduKeyboardAutoManagerScroll.Connect
lze volat, aby se po zakázání znovu povolilo chování. - Jak se barva karty v aplikaci Shell změnila na některých platformách. Další informace najdete v tématu Vzhled tabulátoru.
- Není nutné zadat hodnotu vlastnosti
$(ApplicationIdGuid)
sestavení v souboru projektu vaší aplikace. Důvodem je to, že aplikace .NET MAUI pro Windows už nevyžadují identifikátor GUID jako ID aplikace a místo toho jako ID aplikace používají hodnotu$(ApplicationId)
vlastnosti sestavení. Proto se stejné ID aplikace formátu reverzní domény používá na všech platformách, například com.mycompany.myapp. - Aplikace .NET MAUI Mac Catalyst už nejsou omezeny na 50 položek nabídky na řádku nabídek.
- Metoda
PlatformImage.FromStream
vMicrosoft.Maui.Graphics
oboru názvů se teď dá použít k načtení imagí ve Windows, a nemusíte ji používatW2DImageLoadingService
. - Animace v Androidu respektují nastavení systémové animace. Další informace najdete v tématu Základní animace.
Výkon
V rozhraní .NET MAUI 8 je spousta změn výkonu. Tyto změny je možné klasifikovat do pěti oblastí:
- Nové funkce
- Výkon sestavení a vnitřní smyčky
- Vylepšení výkonu nebo velikosti aplikace
- Struktury a
IEquatable
v .NET MAUI - Oprava potíží s výkonem v
{AppThemeBinding}
- Adresa
CA1307
aCA1309
výkon - Adresa
CA1311
pro zajištění výkonu - Odebrání nepoužívané
ViewAttachedToWindow
události v Androidu - Odebrat nepotřebné
System.Reflection
pro{Binding}
- Použití
StringComparer.Ordinal
proDictionary
aHashSet
- Omezení spolupráce v Javě v
MauiDrawable
Androidu - Vylepšení výkonu rozložení v Androidu
Label
- Omezení volání zprostředkovatele komunikace v Javě pro ovládací prvky v .NET MAUI
- Zlepšení výkonu v Androidu
Entry.MaxLength
- Zlepšení využití paměti ve
CollectionView
Windows - Použití
UnmanagedCallersOnlyAttribute
na platformách Apple - Rychlejší spolupráce v Javě pro řetězce v Androidu
- Rychlejší spolupráce v Javě pro události jazyka C# v Androidu
- Použití ukazatelů na funkce pro JNI
- Odstraněný
Xamarin.AndroidX.Legacy.Support.V4
- Odstranění duplicitních dat obecných typů v iOSu a macOS
- Oprava
System.Linq.Expressions
implementace na platformách podobných iOSu - Nastavení
DynamicCodeSupport=false
pro iOS a Catalyst
- Struktury a
- Nevrácená paměť
- Nástroje a dokumentace
Další informace najdete v tématu Vylepšení výkonu .NET 8 v rozhraní .NET MAUI.
Upgrade z .NET 7 na .NET 8
Pokud chcete upgradovat projekty z .NET 7 na .NET 8, nainstalujte .NET 8 a úlohu .NET MAUI pomocí sady Visual Studio 17.8 nebo pomocí samostatného instalačního dotnet workload install maui
programu a příkazu.
Pak otevřete soubor .csproj a změňte Monikers cílové architektury (TFMs) z 7 na 8. Pokud používáte TFM, jako net7.0-ios13.6
je třeba, že odpovídá verzi platformy, nebo ji úplně odeberete. Následující příklad ukazuje TFM pro projekt .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>
Následující příklad ukazuje TFM pro projekt .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>
Explicitní odkazy na balíčky by se také měly přidat do souboru .csproj pro následující balíčky NuGet .NET MAUI:
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
Na $(MauiVersion)
proměnnou odkazuje verze rozhraní .NET MAUI, kterou jste nainstalovali. Můžete to přepsat přidáním $(MauiVersion)
vlastnosti sestavení do souboru .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>
To může být užitečné při použití ad hoc buildů z nočního informačního kanálu nebo sestavení stažených z žádostí o přijetí změn.
Kromě toho $(ApplicationIdGuid)
lze vlastnost sestavení odebrat ze souboru .csproj v .NET 8. Další informace naleznete v tématu Změny chování.
Před prvním sestavením upgradované aplikace odstraňte bin
složky a obj
složky.
Poznámka:
Šablona projektu pro aplikaci .NET MAUI v .NET 8 povoluje kontext s možnou $(Nullable)
hodnotou null pro projekt s vlastností sestavení. Další informace naleznete v tématu Nullable.