Apa yang baru dalam .NET MAUI untuk .NET 8
Fokus .NET MAUI di .NET 8 adalah kualitas. Di .NET 8, 1618 permintaan pull digabungkan yang menutup 689 masalah. Ini termasuk perubahan dari tim MAUI .NET serta komunitas .NET MAUI. Perubahan ini akan mengakibatkan peningkatan kualitas yang signifikan di .NET 8.
Penting
Karena bekerja dengan dependensi eksternal yang mendasarinya, seperti Xcode atau Android SDK Tools, kebijakan dukungan .NET Multi-platform App UI (.NET MAUI) berbeda dari kebijakan dukungan .NET dan .NET Core. Untuk informasi selengkapnya, lihat Kebijakan dukungan .NET MAUI.
Di .NET 8, .NET MAUI dikirim sebagai beban kerja .NET dan beberapa paket NuGet. Keuntungan dari pendekatan ini adalah memungkinkan Anda untuk dengan mudah menyematkan proyek Anda ke versi tertentu, sekaligus memungkinkan Anda untuk dengan mudah mempratinjau build yang belum dilepas atau eksperimental. Saat Anda membuat proyek .NET MAUI baru, paket NuGet yang diperlukan secara otomatis ditambahkan ke proyek.
Artikel ini mencantumkan fitur baru .NET MAUI untuk .NET 8 dan menyediakan tautan ke informasi yang lebih rinci tentang masing-masing.
Untuk informasi tentang apa yang baru di .NET 8, lihat Apa yang baru di .NET 8.
Fungsionalitas baru
Meskipun fokus rilis .NET MAUI ini adalah kualitas, ada juga beberapa fungsionalitas baru yang memungkinkan skenario baru di aplikasi Anda.
Kontrol
- Kontrol yang mendukung metode ekstensi perolehan input teks yang mendukung persembunyian dan menampilkan keyboard input lunak. Untuk informasi selengkapnya, lihat Menyembunyikan dan menampilkan keyboard input lunak.
- Kelas ContentPage mendapatkan HideSoftInputOnTapped properti, yang menunjukkan apakah mengetuk di mana saja di halaman akan menyebabkan keyboard input lunak bersembunyi jika terlihat. Untuk informasi selengkapnya, lihat ContentPage.
- BlazorWebViewStartPath mendapatkan properti, metode, dan kemampuan pengelogan yang TryDispatchAsync ditingkatkan. Untuk informasi selengkapnya, lihat Menghosting aplikasi web Blazor di aplikasi .NET MAUI menggunakan BlazorWebView.
- WebViewUserAgent mendapatkan properti. Untuk informasi selengkapnya, lihat WebView.
- Pemutaran media sebaris video HTML5, termasuk pemutaran otomatis dan gambar dalam gambar, telah diaktifkan secara default untuk WebView di iOS. Untuk informasi selengkapnya, lihat Mengatur preferensi pemutaran media di iOS dan Mac Catalyst.
- Kelebihan
Grid.Add
beban yang menerima 5 argumen telah ditambahkan kembali ke .NET MAUI. Namun, metode ini tidak digunakan lagi dan hanya hadir untuk membantu migrasi dari Xamarin.Forms. - GridAddWithSpan mendapatkan metode ekstensi yang menambahkan tampilan ke Grid pada baris dan kolom yang ditentukan dengan rentang baris dan kolom yang ditentukan.
Desktop
- Item bilah menu dan item menu konteks dapat dipanggil melalui pintasan keyboard yang dikenal sebagai akselerator keyboard. Untuk informasi selengkapnya, lihat Akselerator keyboard.
- Aplikasi Windows dapat diterbitkan sebagai aplikasi yang tidak dikemas. Untuk informasi selengkapnya, lihat Menerbitkan aplikasi .NET MAUI yang tidak dikemas untuk Windows dengan CLI.
Pengenal gerakan
- PointerGestureRecognizer gains PointerPressedCommand, PointerPressedCommandParameter, PointerReleasedCommand, PointerReleasedCommandParameter properti, dan PointerPressed PointerReleased peristiwa. Untuk informasi selengkapnya, lihat Mengenali gerakan pointer.
- Objek PointerEventArgs yang menyertai peristiwa pointer yang diangkat oleh PointerGestureRecognizer kelas mendapatkan PlatformArgs properti jenis PlatformPointerEventArgs. Properti ini menyediakan akses ke argumen khusus platform untuk peristiwa gerakan penunjuk. Untuk informasi selengkapnya, lihat Mengenali gerakan pointer.
- Objek DragStartingEventArgs, DragEventArgs, DropEventArgs, dan DropCompletedEventArgs yang menyertai peristiwa gerakan seret dan letakkan masing-masing mendapatkan
PlatformArgs
properti. Properti ini menyediakan akses ke argumen khusus platform untuk peristiwa seret atau letakkan. Untuk informasi selengkapnya, lihat Mengenali gerakan seret dan letakkan. - Posisi di mana gerakan seret atau letakkan terjadi dapat diperoleh dengan memanggil GetPosition metode pada DragEventArgsobjek , , DragStartingEventArgsatau DropEventArgs . Untuk informasi selengkapnya, lihat Mengenali gerakan seret dan letakkan.
- Kelas ini TapGestureRecognizer mendapatkan kemampuan untuk menangani ketukan sekunder di Android. Untuk informasi selengkapnya, lihat Mengenali gerakan ketukan.
Navigasi
- Navigasi shell mendapatkan kelebihan beban yang memungkinkan Anda meneruskan data navigasi penggunaan tunggal, yang dibersihkan GoToAsync setelah navigasi terjadi, sebagai ShellNavigationQueryParameters objek. Untuk informasi selengkapnya, lihat Meneruskan data navigasi berbasis objek penggunaan tunggal.
Integrasi platform
- Kelas Geolocation dapat mendengarkan perubahan lokasi saat aplikasi berada di latar depan. Untuk informasi selengkapnya, lihat Mendengarkan perubahan lokasi.
- FlashlightIsSupportedAsync mendapatkan metode yang menentukan apakah senter tersedia pada perangkat. Untuk informasi selengkapnya, lihat Senter.
- SensorSpeed interval telah disatukan di semua platform. Untuk informasi selengkapnya, lihat Mengakses sensor perangkat.
- Kelas ini Permissions mendapatkan Permissions.Bluetooth izin, yang merupakan izin Android 12 untuk mencari perangkat Bluetooth, membuat perangkat saat ini dapat ditemukan ke perangkat Bluetooth lainnya, dan berkomunikasi dengan perangkat Bluetooth yang sudah dipasangkan. Untuk informasi selengkapnya, lihat Izin.
- Kelas ini Permissions mendapatkan Permissions.NearbyWifiDevices izin, yang merupakan izin Android 13 untuk mengakses perangkat WiFi terdekat. Untuk informasi selengkapnya, lihat Izin.
XAML
- Atribut
x:ClassModifier
dapat ditentukan pada kelas XAML, untuk mengontrol tingkat akses untuk kelas yang dihasilkan dalam rakitan. Untuk informasi selengkapnya, lihat Pengubah kelas. - Sumber daya yang ResourceDictionary ditentukan dalam juga dapat dikonsumsi dalam
AppThemeBinding
denganDynamicResource
ekstensi markup. Untuk informasi selengkapnya, lihat Menentukan dan menggunakan sumber daya tema. - Color
ContentProperty
adalah kelasSolidColorBrush, dan oleh karena itu tidak perlu diatur secara eksplisit dari XAML.
Pemecahan Masalah
- Untuk tujuan pemecahan masalah, pembuatan sumber daya dapat dinonaktifkan. Untuk informasi selengkapnya, lihat Menonaktifkan kemasan gambar, Menonaktifkan pengemasan layar percikan, Menonaktifkan kemasan font, dan Menonaktifkan kemasan file aset.
- Untuk tujuan pemecahan masalah, layar splash kosong dapat dihasilkan. Untuk informasi selengkapnya, lihat Membuat layar splash kosong.
- Resizeter memeriksa nama file gambar duplikat. Untuk informasi selengkapnya, lihat Kesalahan nama file gambar duplikat.
Lain-lain
- Manajemen jendela dapat dipisahkan dari
App
kelas . Untuk informasi selengkapnya, lihat Memisahkan manajemen jendela dari kelas Aplikasi. - Beberapa font sistem dapat dengan mudah digunakan di aplikasi Android. Untuk informasi selengkapnya, lihat Menggunakan font.
- Di iOS,
MauiUIApplicationDelegate
mendapatkan metode yang dapat ditimpa atau dikonsumsiPerformFetch
melaluiiOSLifecycle.PerformFetch
delegasi. Untuk informasi selengkapnya, lihat peristiwa siklus hidup platform iOS dan Mac Catalyst.
Penghentian dan penghapusan jenis
Jenis atau anggota berikut tidak digunakan lagi:
- ClickGestureRecognizer sudah tidak digunakan lagi.
- Properti
AutomationProperties.Name
,AutomationProperties.HelpText
, danAutomationProperties.LabeledBy
terlampir telah tidak digunakan lagi. - FocusChangeRequested sudah tidak digunakan lagi. Sebagai gantinya Focus() , gunakan metode untuk mencoba mengatur fokus pada tampilan.
Jenis atau anggota berikut telah dihapus:
- Properti
Application.Properties
danApplication.SavePropertiesAsync
metode telah dihapus. Untuk memigrasikan data properti aplikasi Anda ke .NET MAUI, lihat Memigrasikan data dari kamus properti aplikasi Xamarin.Forms ke preferensi MAUI .NET. - Properti
PhoneDialer.Current
telah dihapus. GunakanPhoneDialer.Default
sebagai gantinya. OpenGLView
telah dihapus.
Perubahan perilaku
Perilaku berikut telah berubah dari rilis sebelumnya:
- Penggunaan Map kontrol dari XAML sekarang memerlukan deklarasi namespace berikut
xmlns
:xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
. - Penembolokan gambar dinonaktifkan di Android saat memuat gambar dari streaming dengan
ImageSource.FromStream
metode . Hal ini disebabkan oleh kurangnya data untuk membuat kunci cache yang wajar. - Di iOS, halaman secara otomatis menggulir saat keyboard input lunak akan mencakup bidang entri teks, sehingga bidang berada di atas keyboard input lunak. Metode
KeyboardAutoManagerScroll.Disconnect
ini, diMicrosoft.Maui.Platform
namespace, dapat dipanggil untuk menonaktifkan perilaku default ini. MetodeKeyboardAutoManagerScroll.Connect
ini dapat dipanggil untuk mengaktifkan kembali perilaku setelah dinonaktifkan. - Bagaimana warna tab diatur dalam aplikasi Shell telah berubah di beberapa platform. Untuk informasi selengkapnya, lihat Tampilan tab.
- Tidak diharuskan menentukan nilai untuk
$(ApplicationIdGuid)
properti build dalam file proyek aplikasi Anda. Ini karena aplikasi Windows .NET MAUI tidak lagi memerlukan GUID sebagai ID aplikasi, dan sebaliknya menggunakan nilai$(ApplicationId)
properti build sebagai ID aplikasi. Oleh karena itu, ID aplikasi format domain terbalik yang sama sekarang digunakan di semua platform, seperti com.mycompany.myapp. - Aplikasi .NET MAUI Mac Catalyst tidak lagi dibatasi hingga 50 item menu di bilah menu.
- Metode ini
PlatformImage.FromStream
, diMicrosoft.Maui.Graphics
namespace layanan, sekarang dapat digunakan untuk memuat gambar di Windows alih-alih harus menggunakanW2DImageLoadingService
kelas . - Di Android, animasi menghormati pengaturan animasi sistem. Untuk informasi selengkapnya, lihat Animasi dasar.
Performa
Ada banyak perubahan performa di .NET MAUI 8. Perubahan ini dapat diklasifikasikan ke dalam lima area:
- Fitur baru
- Performa perulangan build dan inner
- Peningkatan performa atau ukuran aplikasi
- Struktur dan
IEquatable
di .NET MAUI - Memperbaiki masalah performa di
{AppThemeBinding}
- Alamat
CA1307
danCA1309
untuk performa - Alamat
CA1311
untuk performa - Menghapus peristiwa yang tidak digunakan
ViewAttachedToWindow
di Android - Hapus yang tidak perlu
System.Reflection
untuk{Binding}
- Gunakan
StringComparer.Ordinal
untukDictionary
danHashSet
- Mengurangi interop Java di
MauiDrawable
Android - Meningkatkan performa
Label
tata letak di Android - Mengurangi panggilan interop Java untuk kontrol di .NET MAUI
- Meningkatkan performa
Entry.MaxLength
di Android - Meningkatkan penggunaan
CollectionView
memori pada Windows - Gunakan
UnmanagedCallersOnlyAttribute
pada platform Apple - Interop Java yang lebih cepat untuk string di Android
- Interop Java yang lebih cepat untuk peristiwa C# di Android
- Gunakan Penunjuk Fungsi untuk JNI
- Dihapus
Xamarin.AndroidX.Legacy.Support.V4
- Deduplikasi generik di iOS dan macOS
- Memperbaiki
System.Linq.Expressions
implementasi pada platform seperti iOS - Diatur
DynamicCodeSupport=false
untuk iOS dan Catalyst
- Struktur dan
- Kebocoran memori
- Alat dan dokumentasi
Untuk informasi selengkapnya, lihat Peningkatan Performa .NET 8 di .NET MAUI.
Tingkatkan dari .NET 7 ke .NET 8
Untuk meningkatkan proyek Anda dari .NET 7 ke .NET 8, instal .NET 8 dan beban kerja .NET MAUI dengan Visual Studio 17.8+, atau dengan alat penginstal mandiri dan dotnet workload install maui
perintah .
Kemudian, buka file .csproj Anda dan ubah Monikers Kerangka Kerja Target (TFM) dari 7 menjadi 8. Jika Anda menggunakan TFM seperti net7.0-ios13.6
pastikan untuk mencocokkan versi platform atau menghapusnya sepenuhnya. Contoh berikut menunjukkan TFM untuk proyek .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>
Contoh berikut menunjukkan TFM untuk proyek .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>
Referensi paket eksplisit juga harus ditambahkan ke file .csproj Anda untuk paket NuGet .NET MAUI berikut:
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
Variabel $(MauiVersion)
dirujuk dari versi .NET MAUI yang telah Anda instal. Anda dapat mengambil alih ini dengan menambahkan $(MauiVersion)
properti build ke file .csproj Anda:
<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>
Ini dapat berguna saat menggunakan build ad-hoc dari umpan malam atau build yang diunduh dari permintaan pull.
Selain itu, $(ApplicationIdGuid)
properti build dapat dihapus dari file .csproj Anda di .NET 8. Untuk informasi selengkapnya, lihat Perubahan perilaku.
Sebelum membuat aplikasi yang ditingkatkan untuk pertama kalinya, hapus bin
folder dan obj
.
Catatan
Templat proyek untuk aplikasi .NET MAUI di .NET 8 memungkinkan konteks nullable untuk proyek dengan $(Nullable)
properti build. Untuk informasi selengkapnya, lihat Nullable.