Guida Maui.net su .Net 10
Guida MAUI.NET su .NET 10
Indice Guida Maui.net su .Net 10
- Introduzione a .NET 10 e MAUI
- Distribuzione modulare e supporto LTS
- Integrazione con .NET Aspire
- Generatore di codice sorgente XAML
- Animazioni
- Controlli e miglioramenti UI
- RefreshView
- Shell
- Diagnostics e Telemetria
- Finestra e gestione UI
- Centro Messaggi (MessagingCenter)
- Funzionalità della piattaforma
- Popup
- Miglioramenti SafeArea
- Elementi della barra degli strumenti secondari
- XAML e namespace globali
- Estensioni di markup XAML
- .NET per Android
- .NET per iOS
- Funzionalità obsolete e breaking changes
- Pro e Contro di MAUI.NET 10
- Conclusioni e formazione continua
1. Introduzione a .NET 10 e MAUI
.NET 10 rappresenta una milestone fondamentale nell’evoluzione dell’ecosistema Microsoft, essendo una release Long-Term Support (LTS) con supporto garantito per tre anni. Per MAUI (Multi-platform App UI), questa versione si concentra principalmente sul miglioramento della qualità del prodotto piuttosto che sull’introduzione di nuove funzionalità rivoluzionarie.
MAUI.NET 10 supporta Android 5+, iOS 12.2+, macOS 12+ (via Mac Catalyst), Windows 10 versione 1809+ e Windows 11. Una novità importante è l’aggiunta del supporto per Android API Level 35 e 36, così come per iOS 26, garantendo compatibilità con le ultime versioni dei sistemi operativi mobile.
Il focus su qualità significa stabilità migliorata, performance ottimizzate e un’esperienza di sviluppo più fluida. Questo approccio è particolarmente importante per applicazioni enterprise che richiedono affidabilità e supporto a lungo termine.
2. Distribuzione modulare e supporto LTS
Una delle modifiche architetturali più significative riguarda il modello di distribuzione di MAUI. In .NET 10, MAUI viene fornito come workload .NET e come collezione di pacchetti NuGet modulari, abbandonando l’approccio monolitico delle versioni precedenti.
Vantaggi dell’approccio modulare:
- Possibilità di bloccare i progetti a versioni specifiche di MAUI
- Preview e testing di build sperimentali più semplici
- Gestione granulare delle dipendenze
- Maggiore controllo sul ciclo di vita delle dipendenze
<!-- Esempio di riferimento modulare nel file .csproj -->
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="10.0.0" />
<PackageReference Include="Microsoft.Maui.Graphics" Version="10.0.0" />
</ItemGroup>
È importante notare che la policy di supporto di MAUI differisce da quella standard di .NET, a causa delle dipendenze esterne come Xcode e Android SDK Tools. Gli sviluppatori devono essere consapevoli di queste differenze per pianificare adeguatamente il ciclo di vita delle loro applicazioni.
3. Integrazione con .NET Aspire
Una delle novità più rilevanti è l’integrazione nativa con .NET Aspire, il framework Microsoft per applicazioni cloud-native. MAUI 10 include un nuovo template di progetto che crea automaticamente un progetto con le impostazioni predefinite di .NET Aspire.
Cosa offre l’integrazione Aspire:
.NET Aspire è una piattaforma per lo sviluppo di applicazioni cloud-native e distribuite. L’integrazione con MAUI porta questi benefici direttamente nelle app mobile e desktop:
- Telemetria automatica: Configurazione built-in di OpenTelemetry per metriche e tracing
- Service Discovery: Configurazione automatica per la scoperta di servizi
- Logging strutturato: Sistema di logging avanzato per diagnostica
- Health Checks: Monitoraggio dello stato dell’applicazione
// In MauiProgram.cs
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});
// Aggiunge le impostazioni predefinite di Aspire
builder.AddServiceDefaults();
return builder.Build();
}
Questa integrazione è particolarmente utile per applicazioni enterprise che necessitano di monitoraggio distribuito, logging centralizzato e diagnostica avanzata in ambienti di produzione.
4. Generatore di codice sorgente XAML
Una delle migliorie più significative per le performance è l’introduzione del generatore di codice sorgente XAML (XAML Source Generator). Questa funzionalità sposta la compilazione XAML dal runtime al build-time.
Benefici del Source Generator:
- Rilevamento degli errori in fase di compilazione
- Startup dell’applicazione più veloce
- Codice fortemente tipizzato generato automaticamente
- Migliore supporto IntelliSense
- Supporto per debugging con attributo [Generated]
Abilitazione:
<!-- Nel file .csproj del progetto MAUI -->
<PropertyGroup>
<MauiXamlInflator>SourceGen</MauiXamlInflator>
</PropertyGroup>
Il generatore decora i tipi generati con l’attributo [Generated], migliorando l’integrazione con gli strumenti di sviluppo. Questo rappresenta un cambio di paradigma rispetto all’interpretazione runtime del XAML, riducendo significativamente l’overhead durante l’esecuzione.
5. Animazioni
Le animazioni in MAUI 10 mantengono le API esistenti della classe ViewExtensions, offrendo metodi come FadeTo, RotateTo, ScaleTo e TranslateTo. Tutte queste animazioni supportano funzioni di easing per controllo granulare del movimento.
Esempio di animazione base:
// Animazione con easing
await image.TranslateTo(0, 200, 2000, Easing.BounceOut);
// Animazioni composite
await Task.WhenAll(
image.RotateTo(360, 2000),
image.ScaleTo(2, 2000),
image.FadeTo(0.5, 2000)
);
In .NET 10, le animazioni rispettano le impostazioni di sistema su Android: se le animazioni sono disabilitate per accessibilità o risparmio energetico, salteranno immediatamente allo stato finale invece di bloccare l’UI.
6. Controlli e miglioramenti UI
MAUI 10 introduce diversi miglioramenti ai controlli esistenti:
CollectionView e CarouselView: I nuovi handler introdotti opzionalmente in .NET 9 per iOS e Mac Catalyst sono ora predefiniti, portando miglioramenti significativi di performance e stabilità.
Editor e Entry (Android): Cambio delle view native da AppCompatEditText a MauiAppCompatEditText, aggiungendo supporto per l’evento SelectionChanged:
<Entry Placeholder="Inserisci testo"
SelectionChanged="OnSelectionChanged" />
void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedText = ((Entry)sender).Text.Substring(e.OldSelection.Start,
e.OldSelection.Length);
// Gestisci il testo selezionato
}
HybridWebView: Nuovo overload di InvokeJavaScriptAsync per invocare metodi JavaScript senza specificare il tipo di ritorno:
// Invoca JavaScript senza return value
await hybridWebView.InvokeJavaScriptAsync("updateStatus", "Processing");
SearchBar: Nuova proprietà SearchIconColor per personalizzare il colore dell’icona di ricerca:
<SearchBar Placeholder="Cerca articoli..."
SearchIconColor="Blue" />
7. RefreshView
Il controllo RefreshView rimane invariato in MAUI 10, fornendo funzionalità pull-to-refresh per contenuti scrollabili. È un container che wrappa controlli scrollabili come CollectionView, ListView o ScrollView.
<RefreshView IsRefreshing="{Binding IsRefreshing}"
Command="{Binding RefreshCommand}"
RefreshColor="Blue">
<CollectionView ItemsSource="{Binding Items}">
<!-- Definizione item template -->
</CollectionView>
</RefreshView>
8. Shell
MAUI Shell in .NET 10 ha ricevuto importanti correzioni, in particolare un fix critico che impediva il rendering su iOS 26. Questo problema è stato risolto sia per MAUI 9 Service Release 11 che per MAUI 10 RC1.
Shell continua a fornire un’architettura robusta per la navigazione, con supporto per:
- Flyout menu
- Tab navigation
- URI-based navigation
- Routing gerarchico
// Navigazione URI-based
await Shell.Current.GoToAsync("//main/details", true);
9. Diagnostics e Telemetria
MAUI 10 introduce significativi miglioramenti nella diagnostica con il supporto integrato per metriche e telemetria.
Layout Performance Tracking: Nuova strumentazione per operazioni IView.Measure() e IView.Arrange():
- Registrazione dei tempi di esecuzione
- Conteggio delle operazioni
- Tag contestuali ricchi
- Strumentazione zero-allocation basata su struct
Feature Switch: System.Diagnostics.Metrics.Meter.IsSupported per abilitare/disabilitare runtime per AOT/trimming.
Questi strumenti sono essenziali per applicazioni enterprise che richiedono monitoraggio dettagliato delle performance in produzione.
10. Finestra e gestione UI
Su Windows, MAUI 10 aggiunge la possibilità di abilitare/disabilitare i pulsanti di minimizzazione e massimizzazione delle finestre, offrendo maggiore controllo sulla UX desktop:
// Configurazione finestra Windows
#if WINDOWS
Window.MinimizeEnabled = false;
Window.MaximizeEnabled = true;
#endif
11. Centro Messaggi (MessagingCenter)
BREAKING CHANGE IMPORTANTE: MessagingCenter è stato reso interno in .NET 10, rappresentando un cambio architetturale significativo.
Migrazione raccomandata: Utilizzare WeakReferenceMessenger dal pacchetto CommunityToolkit.Mvvm:
// Vecchio approccio (non più disponibile)
MessagingCenter.Send<MainPage>(this, "StatusUpdate");
// Nuovo approccio con WeakReferenceMessenger
// 1. Definire un messaggio
public class StatusUpdateMessage
{
public string Status { get; set; }
}
// 2. Inviare
WeakReferenceMessenger.Default.Send(new StatusUpdateMessage
{
Status = "Updated"
});
// 3. Ricevere
WeakReferenceMessenger.Default.Register<StatusUpdateMessage>(this,
(r, m) =>
{
// Gestisci il messaggio
Debug.WriteLine($"Status: {m.Status}");
});
Questo cambiamento allinea MAUI con le moderne pratiche MVVM e riduce il rischio di memory leak grazie all’uso di weak references.
12. Funzionalità della piattaforma
MAUI 10 introduce una nuova funzionalità platform-specific per iOS e Mac Catalyst che permette di visualizzare pagine modali come popover:
#if IOS || MACCATALYST
await Navigation.PushModalAsync(detailPage, true);
// Su iOS/Mac Catalyst, verrà mostrato come popover
#endif
Inoltre, su Windows è stata aggiunta l’implementazione per Permissions.RequestAsync<Permissions.Microphone>(), permettendo la richiesta e verifica dei permessi per il microfono.
13. Popup
I popup in MAUI vengono gestiti tramite il .NET MAUI Community Toolkit. Non ci sono modifiche sostanziali in .NET 10, ma l’integrazione con SafeArea è stata migliorata per garantire che i popup rispettino le aree sicure del dispositivo.
// Utilizzo base di popup tramite Community Toolkit
await this.ShowPopupAsync(new MyCustomPopup());
14. Miglioramenti SafeArea – Guida Maui.net su .Net 10
Uno dei miglioramenti più significativi riguarda la gestione delle SafeArea, con un nuovo sistema più flessibile e cross-platform.
Nuova proprietà SafeAreaEdges: Disponibile su Layout, ContentPage, ScrollView, ContentView e Border:
public enum SafeAreaEdges
{
None = 0, // Contenuto edge-to-edge (no padding safe area)
SoftInput = 1, // Padding sempre per tastiera/soft input
Container = 2, // Flusso sotto tastiera, evita barre/notch
Default = 4, // Comportamento predefinito della piattaforma
All = int.MaxValue // Rispetta tutti i safe area insets
}
Esempi pratici:
<!-- Contenuto completamente edge-to-edge -->
<ContentPage SafeAreaEdges="None">
<Grid Background="Blue">
<!-- Contenuto va sotto notch e barre -->
</Grid>
</ContentPage>
<!-- Evita tastiera ma permette contenuto sotto barre -->
<ScrollView SafeAreaEdges="SoftInput">
<VerticalStackLayout>
<!-- Contenuto -->
</VerticalStackLayout>
</ScrollView>
<!-- Comportamento sicuro su tutti i bordi -->
<ContentPage SafeAreaEdges="All">
<StackLayout>
<!-- Contenuto rispetta tutte le safe area -->
</StackLayout>
</ContentPage>
Migrazione da versioni precedenti: La proprietà legacy Page.UseSafeArea (iOS-specific) continua a funzionare ma è considerata obsoleta. Il nuovo codice dovrebbe usare SafeAreaEdges.
15. Elementi della barra degli strumenti secondari
iOS e macOS ora supportano elementi secondari nella toolbar, allineandosi meglio alle convenzioni della piattaforma:
<ContentPage.ToolbarItems>
<!-- Elementi primari - visibili direttamente -->
<ToolbarItem Text="Salva"
Order="Primary"
Priority="0" />
<ToolbarItem Text="Modifica"
Order="Primary"
Priority="1" />
<!-- Elementi secondari - nel menu overflow -->
<ToolbarItem Text="Condividi"
Order="Secondary"
Priority="0" />
<ToolbarItem Text="Elimina"
Order="Secondary"
Priority="1" />
<ToolbarItem Text="Impostazioni"
Order="Secondary"
Priority="2" />
</ContentPage.ToolbarItems>
Su iOS, gli elementi secondari sono raggruppati in un menu pull-down con l’icona ellipsi di sistema. Il menu si ricostruisce automaticamente quando le proprietà degli elementi cambiano.
16. XAML e namespace globali
.NET 10 Preview 5 introduce un’esperienza più pulita per i namespace XML in XAML, eliminando la maggior parte delle dichiarazioni xmlns: ripetitive:
Prima (.NET 9):
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:models="clr-namespace:MyApp.Models"
xmlns:controls="clr-namespace:MyApp.Controls"
x:Class="MyApp.MainPage">
<!-- Contenuto -->
</ContentPage>
Dopo (.NET 10):
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.MainPage">
<!-- I namespace locali sono impliciti -->
<models:MyModel />
<controls:CustomButton />
</ContentPage>
Il compilatore inietta automaticamente i namespace MAUI predefiniti, riducendo il boilerplate e migliorando la leggibilità del codice.
17. Estensioni di markup XAML – Guida Maui.net su .Net 10
Le estensioni di markup XAML rimangono invariate in MAUI 10, continuando a supportare:
{Binding}per data binding{StaticResource}e{DynamicResource}per risorse{x:Static}per membri statici{x:Type}per riferimenti ai tipi- Estensioni custom personalizzate
Il source generator XAML migliora il supporto IntelliSense per queste estensioni.
18. .NET per Android
Le novità principali per Android in MAUI 10 includono:
Supporto API Level 35 e 36: Compatibilità con le ultime versioni di Android, incluso Android 16.
Miglioramenti al binding: Build dei progetti binding più veloci su Windows senza necessità di Mac remoto.
Default Template: La versione Android minima supportata nei template è ora API 24, prevenendo crash runtime con i Default Interface Methods di Java.
Supporto sperimentale CoreCLR: Possibilità di utilizzare CoreCLR invece del runtime Mono, migliorando significativamente le performance:
<!-- Abilitare CoreCLR (sperimentale) -->
<PropertyGroup Condition="'$(TargetFramework)' == 'net10.0-android'">
<UseCoreCLR>true</UseCoreCLR>
</PropertyGroup>
Editor/Entry SelectionChanged: Supporto nativo per l’evento di cambio selezione.
19. .NET per iOS
Per la piattaforma iOS, MAUI 10 porta:
Supporto Xcode 26: Compatibilità con la versione beta di Xcode 26, disponibile sia in MAUI 9 stabile che MAUI 10 preview.
Fix critici Shell: Risoluzione del problema che impediva il rendering di Shell su iOS 26.
Trimmer abilitato di default: Il trimmer è ora abilitato nelle seguenti configurazioni, con warning attivati dopo che tutti i warning della base class library sono stati risolti in .NET 9.
SafeArea migliorata: Risolti problemi con spazi extra in fondo a ScrollView e gestione più coerente delle safe area.
Toolbar secondari: Implementazione nativa del pattern iOS 13+ per elementi toolbar secondari con menu pull-down.
20. Funzionalità obsolete e breaking changes – Guida Maui.net su .Net 10
MAUI 10 introduce diversi cambiamenti che impattano il codice esistente:
Deprecazioni:
- MessagingCenter → Reso interno, sostituito da
WeakReferenceMessenger - Accelerator class → Rimossa da
Microsoft.Maui.Controls, usareKeyboardAccelerator - ClickGestureRecognizer → Rimossa, usare
TapGestureRecognizer - Compatibility.Layout → Rimossa da template, usare layout MAUI nativi
- TableView → Deprecato, migrare a
CollectionView - ListView → Deprecato, migrare a
CollectionView - Cell types →
EntryCell,ImageCell,SwitchCell,TextCell,ViewCelldeprecati
DisplayAlert/ActionSheet: I metodi sincroni sono obsoleti, sostituiti dalle versioni async:
// Obsoleto
DisplayAlert("Titolo", "Messaggio", "OK");
// Nuovo approccio
await DisplayAlertAsync("Titolo", "Messaggio", "OK");
Metodi animazione: Versioni sincrone deprecate in favore delle controparti async:
FadeTo→FadeToAsyncRotateTo→RotateToAsyncScaleTo→ScaleToAsync- E così via…
21. Pro e Contro di MAUI.NET 10
PRO
Stabilità e qualità: Focus primario su bug fix e stabilizzazione del framework, rendendo MAUI production-ready per scenari enterprise complessi.
Performance migliorate:
- XAML Source Generator riduce l’overhead runtime
- Handler ottimizzati per CollectionView/CarouselView
- CoreCLR sperimentale su Android per performance superiori
- Miglioramenti JIT nel runtime .NET 10
Supporto LTS: Tre anni di supporto garantito, fondamentale per applicazioni enterprise che richiedono manutenibilità a lungo termine.
Integrazione Aspire: Telemetria e diagnostica enterprise-grade native, essenziali per applicazioni distribuite moderne.
Distribuzione modulare: Maggiore flessibilità nella gestione delle dipendenze e possibilità di testare build sperimentali.
Miglioramenti cross-platform: SafeArea unificata, supporto API più recenti (Android 36, iOS 26, Xcode 26).
Tooling migliorato: IntelliSense potenziato grazie al source generator, namespace impliciti in XAML.
CONTRO
Breaking changes significativi: Richiede refactoring del codice esistente (MessagingCenter, controlli deprecati, metodi sincroni).
Curva di apprendimento: Nuovi pattern (WeakReferenceMessenger, SafeAreaEdges) richiedono tempo per essere padroneggiati.
Migrazione da Xamarin.Forms: La deprecazione di controlli legacy rende la migrazione più complessa per progetti esistenti di grandi dimensioni.
Dipendenze esterne: Policy di supporto dipendente da Xcode e Android SDK può complicare la pianificazione del ciclo di vita.
Funzionalità sperimentali: CoreCLR su Android è ancora sperimentale, non raccomandato per produzione immediata.
Documentazione in evoluzione: Alcune nuove funzionalità non hanno ancora documentazione completa.
Ecosistema in maturazione: Rispetto a Flutter o React Native, l’ecosistema di librerie third-party è ancora in crescita.
22. Conclusioni e formazione continua
MAUI.NET 10 rappresenta una release fondamentale per l’ecosistema .NET mobile e desktop. Il focus su qualità, stabilità e supporto LTS la rende ideale per progetti enterprise che richiedono affidabilità a lungo termine.
L’importanza della formazione continua
Nel panorama tecnologico attuale, caratterizzato da rapida evoluzione e innovazione continua, la formazione dei team IT non è più un optional ma una necessità strategica. Le organizzazioni che investono nella crescita professionale dei propri dipendenti ottengono:
Vantaggi competitivi tangibili:
- Time-to-market ridotto: Team formati producono codice di qualità più velocemente
- Riduzione dei costi di manutenzione: Codice scritto seguendo best practice richiede meno interventi
- Retention dei talenti: I dipendenti che sentono l’azienda investire su di loro sono più motivati e fedeli
- Qualità del software: Conoscenza approfondita del framework porta a architetture più solide
Impatto culturale: La formazione continua crea una cultura dell’apprendimento che:
- Aumenta la soddisfazione dei dipendenti
- Migliora la collaborazione tra team
- Facilita l’adozione di nuove tecnologie
- Riduce la resistenza al cambiamento
Il Corso MAUI.NET di Innovaformazione
Per supportare le aziende nella transizione a MAUI.NET 10, Innovaformazione offre un corso specializzato dedicato alla piattaforma, progettato specificamente per team di sviluppo aziendali.
Caratteristiche del corso:
- Modalità: Online in classe virtuale, garantendo interazione diretta con i docenti
- Flessibilità: Calendario da concordare in base alle esigenze aziendali
- Personalizzazione: Possibilità di adattare i contenuti alle specifiche necessità del team
- Certificazione: Al termine del percorso formativo
Finanziamento tramite fondi interprofessionali:
Innovaformazione gestisce completamente il piano formativo finanziato tramite fondi interprofessionali come Fondimpresa, garantendo:
- Corso completamente gratuito per l’azienda
- Gestione burocratica e amministrativa completa
- Assistenza nella rendicontazione
- Nessun anticipo economico richiesto
Questo significa che la vostra azienda può formare il team IT senza costi diretti, utilizzando le risorse già accantonate attraverso i contributi obbligatori.
Argomenti trattati:
- Architettura MAUI e pattern MVVM
- Sviluppo cross-platform per Android, iOS, Windows, macOS
- Novità di .NET 10 e migrazione da versioni precedenti
- Best practices per performance e ottimizzazione
- Gestione della sicurezza e dei dati
Investire nel futuro
La tecnologia è il motore dell’innovazione aziendale, ma sono le persone che guidano questa trasformazione. Investire nella formazione del team IT significa:
- Proteggere l’investimento tecnologico: Un team formato massimizza il ROI delle soluzioni implementate
- Costruire competenze interne: Riduzione della dipendenza da consulenti esterni
- Creare valore a lungo termine: Competenze che crescono con l’evoluzione della tecnologia
- Attrarre nuovi talenti: Le aziende che investono in formazione sono più attrattive nel mercato del lavoro
Non sottovalutate l’importanza di mantenere il vostro team aggiornato sulle ultime tecnologie. La differenza tra un progetto di successo e uno fallimentare spesso risiede nella competenza e preparazione delle persone che lo realizzano.
Contatti
Per maggiori informazioni sul Corso MAUI.NET e per richiedere un preventivo gratuito personalizzato:
Email: info@innovaformazione.net
Telefono: 347 1012275 (Dario Carrassi)
Visitate il sito per dettagli completi: www.innovaformazione.net
Contattateci senza impegno per:
- Spiegare l’esperienza dei profili da formare
- Discutere personalizzazioni in base alle vostre esigenze
- Valutare le opzioni di finanziamento tramite fondi interprofessionali
- Organizzare un calendario formativo su misura per il vostro team
Investite oggi nella formazione del vostro team IT e preparatevi al futuro dello sviluppo cross-platform con MAUI.NET 10.
Per leggere altri articoli di settore consigliamo invece di navigare sul nostro blog QUI.
Articoli correlati
Claude Code e Migrazioni SAP
Claude Code controllo remoto
Opportunità Carriera Contabilità SAP
Guida SIA AI
Guida Dual LLM Verification
