.NET 8 için .NET MAUI'deki yenilikler
.NET 8'de .NET MAUI'nin odak noktası kalitedir. .NET 8'de 689 sorunu kapatan 1618 çekme isteği birleştirildi. Bunlar .NET MAUI ekibinin yanı sıra .NET MAUI topluluğunun değişikliklerini de içerir. Bu değişiklikler .NET 8'de kalitenin önemli ölçüde artmasına neden olmalıdır.
Önemli
Xcode veya Android SDK Araçları gibi temel alınan dış bağımlılıklarla çalışma nedeniyle .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) destek ilkesi .NET ve .NET Core destek ilkesinden farklıdır. Daha fazla bilgi için bkz . .NET MAUI destek ilkesi.
.NET 8'de .NET MAUI bir .NET iş yükü ve birden çok NuGet paketi olarak sunulur. Bu yaklaşımın avantajı, projelerinizi belirli sürümlere kolayca sabitlemenize ve ayrıca yayınlanmamış veya deneysel derlemeleri kolayca önizlemenize olanak sağlamasıdır. Yeni bir .NET MAUI projesi oluşturduğunuzda, gerekli NuGet paketleri projeye otomatik olarak eklenir.
Bu makalede .NET 8 için .NET MAUI'nin yeni özellikleri listelenir ve her biri hakkında daha ayrıntılı bilgilerin bağlantıları sağlanır.
.NET 8'deki yenilikler hakkında bilgi için bkz . .NET 8'deki yenilikler.
Yeni işlevler
.NET MAUI'nin bu sürümünün odak noktası kalite olsa da, uygulamalarınızda yeni senaryolara olanak tanıyan bazı yeni işlevler de vardır.
Denetimler
- Yumuşak giriş klavyesini gizlemeyi ve göstermeyi destekleyen metin girişi kazanç uzantısı yöntemlerini destekleyen denetimler. Daha fazla bilgi için bkz . Yumuşak giriş klavyesini gizleme ve gösterme.
- sınıfı ContentPage , sayfada herhangi bir yere dokunulduğunda yumuşak giriş klavyesinin görünür olduğunda gizlenip gizlenmeyeceğini belirten bir HideSoftInputOnTapped özellik kazanır. Daha fazla bilgi için bkz . ContentPage.
- BlazorWebView bir StartPath özellik, bir TryDispatchAsync yöntem ve gelişmiş günlük özellikleri kazanır. Daha fazla bilgi için bkz . BlazorWebView kullanarak .NET MAUI uygulamasında Blazor web uygulaması barındırma.
- WebView bir UserAgent özellik kazanır. Daha fazla bilgi için bkz . WebView.
- Otomatik yürütme ve resimdeki resim de dahil olmak üzere HTML5 videonun satır içi medya kayıttan yürütmesi, iOS'ta için varsayılan olarak WebView etkinleştirilmiştir. Daha fazla bilgi için bkz . iOS ve Mac Catalyst'te medya kayıttan yürütme tercihlerini ayarlama.
Grid.Add
5 bağımsız değişken kabul eden aşırı yükleme .NET MAUI'ye geri eklendi. Ancak, bu yöntem kullanım dışıdır ve yalnızca Xamarin.Forms'dan geçişlere yardımcı olmak için mevcuttur.- Gridbelirtilen satır ve sütuna, belirtilen satır ve sütun aralıklarıyla bir görünüm Grid ekleyen bir AddWithSpan uzantı yöntemi kazanır.
Masaüstü
- Menü çubuğu öğeleri ve bağlam menüsü öğeleri, klavye hızlandırıcıları olarak bilinen klavye kısayolları aracılığıyla çağrılabilir. Daha fazla bilgi için bkz . Klavye hızlandırıcıları.
- Windows uygulamaları paketlenmemiş uygulamalar olarak yayımlanabilir. Daha fazla bilgi için bkz . CLI ile Windows için paketlenmemiş bir .NET MAUI uygulaması yayımlama.
Hareket tanıyıcıları
- PointerGestureRecognizerPointerPressedCommand, , PointerPressedCommandParameter, PointerReleasedCommandPointerReleasedCommandParameter özellikleri ve PointerPressed PointerReleased olayları kazanır. Daha fazla bilgi için bkz . İşaretçi hareketini tanıma.
- PointerEventArgs sınıfı tarafından PointerGestureRecognizer tetiklenen işaretçi olaylarına eşlik eden nesnesi türünde PlatformPointerEventArgsbir PlatformArgs özellik kazanır. Bu özellik, işaretçi hareketi olayı için platforma özgü bağımsız değişkenlere erişim sağlar. Daha fazla bilgi için bkz . İşaretçi hareketini tanıma.
- Sürükle DragStartingEventArgsve bırak hareket olaylarına eşlik eden , DragEventArgs, DropEventArgsve DropCompletedEventArgs nesnelerinin her birinin bir
PlatformArgs
özelliği vardır. Bu özellik, bir sürükle veya bırak olayı için platforma özgü bağımsız değişkenlere erişim sağlar. Daha fazla bilgi için bkz . Sürükle ve bırak hareketini tanıma. - Sürükle veya bırak hareketinin gerçekleştiği konum, bir DragEventArgs, DragStartingEventArgsveya DropEventArgs nesnesinde GetPosition yöntemi çağrılarak elde edilebilir. Daha fazla bilgi için bkz . Sürükle ve bırak hareketini tanıma.
- Sınıf, TapGestureRecognizer Android'de ikincil dokunmaları işleme özelliği kazanır. Daha fazla bilgi için bkz . Dokunma hareketini tanıma.
Gezinti
- Kabuk gezintisi, tek kullanımlık gezinti verilerini geçirmenizi sağlayan ve GoToAsync gezinti gerçekleştikten sonra temizlenen bir ShellNavigationQueryParameters aşırı yükleme elde eder. Daha fazla bilgi için bkz . Tek kullanımlık nesne tabanlı gezinti verilerini geçirme.
Platform tümleştirmesi
- Sınıf, Geolocation uygulamalar ön planda olduğunda konum değişikliklerini dinleyebilir. Daha fazla bilgi için bkz . Konum değişikliklerini dinleme.
- FlashlightIsSupportedAsync cihazda bir el feneri olup olmadığını belirleyen bir yöntem kazanır. Daha fazla bilgi için bkz . El feneri.
- SensorSpeed aralıkları tüm platformlarda birleştirildi. Daha fazla bilgi için bkz . Cihaz algılayıcılarına erişme.
- Sınıfı, Permissions Bluetooth cihazlarını aramak, geçerli cihazı diğer Bluetooth cihazları için bulunabilir hale getirmek ve zaten eşleştirilmiş Bluetooth cihazlarıyla iletişim kurmak için android 12 izni olan izni alır Permissions.Bluetooth . Daha fazla bilgi için bkz . İzinler.
- Sınıf Permissions , yakındaki WiFi cihazlarına Permissions.NearbyWifiDevices erişmek için android 13 izni olan izni alır. Daha fazla bilgi için bkz . İzinler.
XAML
- Özniteliği
x:ClassModifier
, derlemede oluşturulan bir sınıfın erişim düzeyini denetlemek için XAML sınıflarında belirtilebilir. Daha fazla bilgi için bkz . Sınıf değiştiricileri. - içinde ResourceDictionary tanımlanan kaynaklar, işaretleme uzantısıyla birlikte
DynamicResource
içindeAppThemeBinding
de kullanılabilir. Daha fazla bilgi için bkz . Tema kaynaklarını tanımlama ve kullanma. - Color
ContentProperty
sınıfıdır SolidColorBrush ve bu nedenle XAML'den açıkça ayarlanması gerekmez.
Sorun giderme
- Sorun giderme amacıyla kaynak oluşturma devre dışı bırakılabilir. Daha fazla bilgi için bkz . Görüntü paketlemeyi devre dışı bırakma, Giriş ekranı paketlemesini devre dışı bırakma, Yazı tipi paketlemeyi devre dışı bırakma ve Varlık dosyası paketlemeyi devre dışı bırakma.
- Sorun giderme amacıyla boş bir giriş ekranı oluşturulabilir. Daha fazla bilgi için bkz . Boş giriş ekranı oluşturma.
- Resizeter yinelenen görüntü dosya adlarını denetler. Daha fazla bilgi için bkz . Yinelenen görüntü dosya adı hataları.
Çeşitli
- Pencere yönetimi sınıfından
App
ayrıştırılabilir. Daha fazla bilgi için bkz . Uygulama sınıfından pencere yönetimini ayırma. - Android uygulamalarında çeşitli sistem yazı tipleri kolayca kullanılabilir. Daha fazla bilgi için bkz . Yazı tiplerini kullanma.
- iOS'ta,
MauiUIApplicationDelegate
temsilci aracılığıylaiOSLifecycle.PerformFetch
geçersiz kılınabilecek veya tüketilebilen birPerformFetch
yöntem kazanır. Daha fazla bilgi için bkz . iOS ve Mac Catalyst platform yaşam döngüsü olayları.
Tür kullanımdan kaldırma ve kaldırma
Aşağıdaki türler veya üyeler kullanım dışı bırakıldı:
- ClickGestureRecognizer kullanım dışı bırakıldı.
AutomationProperties.Name
,AutomationProperties.HelpText
veAutomationProperties.LabeledBy
ekli özellikler kullanım dışı bırakıldı.- FocusChangeRequested kullanım dışı bırakıldı. Bunun yerine, görünümde Focus() odağı ayarlamaya çalışmak için yöntemini kullanın.
Aşağıdaki türler veya üyeler kaldırıldı:
Application.Properties
Özelliği veApplication.SavePropertiesAsync
yöntemi kaldırıldı. Uygulama özellikleri verilerinizi .NET MAUI'ye geçirmek için bkz . Xamarin.Forms uygulama özellikleri sözlüğündeki verileri .NET MAUI tercihlerine geçirme.PhoneDialer.Current
özelliği kaldırıldı. Bunun yerinePhoneDialer.Default
kullanın.OpenGLView
kaldırıldı.
Davranış değişiklikleri
Önceki sürümden itibaren aşağıdaki davranış değişmiştir:
- XAML'den Map denetimin kullanılması artık şu
xmlns
ad alanı bildirimini gerektirir:xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
. - Yöntemiyle
ImageSource.FromStream
bir akıştan görüntü yüklenirken Android'de görüntü önbelleğe alma devre dışı bırakılır. Bunun nedeni, makul bir önbellek anahtarı oluşturmak için veri olmamasıdır. - iOS'ta, yumuşak giriş klavyesi metin giriş alanını kapladığında sayfalar otomatik olarak kaydırılır, böylece alan yumuşak giriş klavyesinin üzerinde olur. Bu
KeyboardAutoManagerScroll.Disconnect
varsayılan davranışı devre dışı bırakmak için ad alanında yöntemiMicrosoft.Maui.Platform
çağrılabilir. YöntemiKeyboardAutoManagerScroll.Connect
, devre dışı bırakıldıktan sonra davranışı yeniden etkinleştirmek için çağrılabilir. - Shell uygulamasında sekmenin renginin ayarlanması bazı platformlarda değişti. Daha fazla bilgi için bkz . Sekme görünümü.
- Uygulamanızın proje dosyasında derleme özelliği için
$(ApplicationIdGuid)
bir değer belirtmek gerekli değildir. Bunun nedeni, .NET MAUI Windows uygulamalarının artık uygulama kimliği olarak GUID gerektirmediği ve bunun yerine derleme özelliğinin$(ApplicationId)
değerini uygulama kimliği olarak kullanmasıdır. Bu nedenle, aynı ters etki alanı biçimi uygulama kimliği artık com.mycompany.myapp gibi tüm platformlarda kullanılır. - .NET MAUI Mac Catalyst uygulamaları artık menü çubuğundaki 50 menü öğesiyle sınırlı değildir.
PlatformImage.FromStream
ad alanındaMicrosoft.Maui.Graphics
yöntemi artık sınıfını kullanmakW2DImageLoadingService
yerine Windows'a görüntü yüklemek için kullanılabilir.- Android'de animasyonlar sistem animasyon ayarlarına saygı gösterir. Daha fazla bilgi için bkz . Temel animasyon.
Performans
.NET MAUI 8'de birçok performans değişikliği vardır. Bu değişiklikler beş alanda sınıflandırılabilir:
- Yeni özellikler
- Derleme ve iç döngü performansı
- Performans veya uygulama boyutu geliştirmeleri
- .NET MAUI'deki yapılar ve
IEquatable
- uygulamasındaki performans sorununu düzeltme
{AppThemeBinding}
- Adres
CA1307
veCA1309
performans için - Performans adresi
CA1311
- Android'de
ViewAttachedToWindow
kullanılmayan olayı kaldırma - Için gereksiz kaldırma
System.Reflection
{Binding}
- ve için
Dictionary
kullanınStringComparer.Ordinal
HashSet
- Android'de
MauiDrawable
Java birlikte çalışabilirlik süresini azaltma - Android'de
Label
düzen performansını geliştirme - .NET MAUI'de denetimler için Java birlikte çalışma çağrılarını azaltma
- Android'de
Entry.MaxLength
performansını geliştirme - Windows'ta bellek kullanımını
CollectionView
iyileştirme - Apple platformlarında kullanma
UnmanagedCallersOnlyAttribute
- Android'de dizeler için daha hızlı Java birlikte çalışma
- Android'de C# olayları için daha hızlı Java birlikte çalışma
- JNI için İşlev İşaretçileri Kullanma
- Kaldırıldı
Xamarin.AndroidX.Legacy.Support.V4
- iOS ve macOS'ta genel türlerin yinelenenleri kaldırma
- iOS benzeri platformlarda uygulamayı düzeltme
System.Linq.Expressions
- iOS ve Catalyst için ayarlama
DynamicCodeSupport=false
- .NET MAUI'deki yapılar ve
- Bellek sızıntıları
- Araçlar ve belgeler
Daha fazla bilgi için bkz . .NET MAUI'de .NET 8 Performans Geliştirmeleri.
.NET 7'den .NET 8'e yükseltme
Projelerinizi .NET 7'den .NET 8'e yükseltmek için Visual Studio 17.8+ ile veya tek başına yükleyici ve komutuyla .NET 8 ve dotnet workload install maui
.NET MAUI iş yükünü yükleyin.
Daha sonra .csproj dosyanızı açın ve Hedef Çerçeve Takma Adlarını (TFM) 7'den 8'e değiştirin. Platform sürümüyle eşleştiğinden veya tamamen kaldırdığınızdan emin olmak gibi net7.0-ios13.6
bir TFM kullanıyorsanız. Aşağıdaki örnekte bir .NET 7 projesinin TFM'leri gösterilmektedir:
<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>
Aşağıdaki örnekte bir .NET 8 projesinin TFM'leri gösterilmektedir:
<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>
Aşağıdaki .NET MAUI NuGet paketleri için .csproj dosyanıza açık paket başvuruları da eklenmelidir:
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
$(MauiVersion)
Değişkenine yüklediğiniz .NET MAUI sürümünden başvurulur. Derleme özelliğini .csproj dosyanıza ekleyerek $(MauiVersion)
bunu geçersiz kılabilirsiniz:
<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>
Bu, gecelik akıştan geçici derlemeler veya çekme isteklerinden indirilen derlemeler kullanılırken yararlı olabilir.
Ayrıca, $(ApplicationIdGuid)
derleme özelliği .NET 8'deki .csproj dosyanızdan kaldırılabilir. Daha fazla bilgi için bkz . Davranış değişiklikleri.
Yükseltilen uygulamanızı ilk kez oluşturmadan önce ve obj
klasörlerini bin
silin.
Not
.NET 8'deki bir .NET MAUI uygulaması için proje şablonu, derleme özelliğiyle projenin null atanabilir bağlamını $(Nullable)
etkinleştirir. Daha fazla bilgi için bkz . Null atanabilir.