.NET MAUI (Multi-platform App UI) è il nuovo framework open-source di Microsoft presente in .NET 6.
MAUI rappresenta l’evoluzione di Xamarin.Forms, e con l’utilizzo di C# e XAML, ci permette di sviluppare applicazioni multipiattaforma per dispositivi mobile, ma anche desktop, supportando le maggiori piattaforme (Android, iOS, macOs e Windows). Con MAUI siamo in grado di realizzare applicazioni multipiattaforma utilizzando un solo progetto, condividendo le risorse tra le piattaforme o introducendo porzioni di codice e risorse, specifici per piattaforma.
MAUI è consigliato a chi:
.NET MAUI ci permette di realizzare applicazioni multi-piattaforma utilizzando un solo progetto (write-once run-anywhere), condividendo le risorse tra le piattaforme o introducendo porzioni di codice e risorse, specifici per piattaforma.
.NET 6 introduce framework specifici per ogni piattaforma supportata:
Tutti i singoli framework hanno acceso alla .NET 6 Base Class Library (BLC), questa dipende dal runtime .NET per fornire l’ambiente di esecuzione. Per Android, iOS e macOS l’ambiente è implementato da Mono, per Windows invece da WinRT.
Questo consente l’esecuzione dell’applicazione su diverse piattaforme, che condividono tra loro la logica di business e l’interfaccia utente, anche se ogni piattaforma ha un modo diverso per interpretare o specificare come tutti gli elementi della UI interagiscono tra di loro.
Per gestire le nuove funzionalità di .NET MAUI, come la condivisione delle risorse tra le varie piattaforme o la possibilità di introdurre porzioni di codice specifiche per piattaforma, viene introdotta anche una nuova struttura della solution.
La solution è costituita da un singolo progetto. Le principali novità introdotte sono:
Cartella Platforms:
All’interno troviamo le singole cartelle per ogni piattaforma supportata dal progetto dove poter inserire le risorse e codice per ogni piattaforma.
Cartella Resources:
In questa singola cartella possiamo gestire tutte risorse condivise tra le varie piattaforme.
File MauiProgram.cs
Una tra le novità principali introdotte da MAUI è .NET Host Builder pattern. La classe MauiProgram crea e ritorna una MauiApp. Ogni singola piattaforma all’avvio della applicazione richiamerà MauiProgram.CreateMauiApp().
Esempio:
La classe MauiProgram con l’implementazione del metodo CreateMauiApp:
namespace MauiCalc
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});
return builder.Build();
}
}
}
Il metodo CreateMauiApp() viene richiamato all’ avvio del applicazione sulla piattaforma iOS:
namespace MauiCalc
{
[Register("AppDelegate")]
public class AppDelegate : MauiUIApplicationDelegate
{
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}
Per presentare le nuove funzionalità introdotte da MAUI abbiamo deciso di creare un piccolo applicativo. Abbiamo cercato di creare una calcolatrice che avrà come target un dispositivo Android e un dispositivo desktop Windows sfruttando lo stesso codice.
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:windows="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.WindowsSpecific;assembly=Microsoft.Maui.Controls"
xmlns:local="clr-namespace:MauiCalc"
x:Class="MauiCalc.App"
windows:Application.ImageDirectory="Assets">
<Application.Resources>
<ResourceDictionary>
<Color x:Key="PrimaryColor">#ffffff</Color>
<Color x:Key="SecondaryColor">#000000</Color>
<Style TargetType="Label">
<Setter Property="TextColor" Value="{DynamicResource SecondaryColor}" />
<Setter Property="FontFamily" Value="OpenSansRegular" />
</Style>
<Style TargetType="Button">
<Setter Property="TextColor" Value="{DynamicResource SecondaryColor}" />
<Setter Property="FontFamily" Value="OpenSansRegular" />
<Setter Property="BackgroundColor" Value="{DynamicResource PrimaryColor}" />
<Setter Property="FontSize" Value="36" />
</Style>
</ResourceDictionary>
</Application.Resources>
</Application>
Nel file App.xaml andiamo a inizializzare e definire le risorse globali utilizzate dal progetto su per tutti i framework. All’interno del tag ResourceDictionary abbiamo:
<Button Text="C" Grid.Row="2" Grid.Column="0"
Clicked="OnCancel"
BackgroundColor ="#a1a4ad"/>
<Button Text="/" Grid.Row="2" Grid.Column="1"
x:Name="ButtonDiv"
BackgroundColor ="#a1a4ad"/>
<Button Text="*" Grid.Row="2" Grid.Column="2"
x:Name="ButtonMul"
BackgroundColor ="#a1a4ad"/>
<Button Text="Del" Grid.Row="2" Grid.Column="3"
Clicked="OnDelete"
BackgroundColor ="#a1a4ad"/>
<Button Text="1" Grid.Row="5" Grid.Column="0"
x:Name="Button1"/>
<Button Text="2" Grid.Row="5" Grid.Column="1"
x:Name="Button2"/>
<Button Text="3" Grid.Row="5" Grid.Column="2"
x:Name="Button3"/>
<Button Text="=" Grid.Row="5" Grid.Column="3" Grid.RowSpan="2"
Clicked="Elaborate"
BackgroundColor ="#324dad"/>
Nel file MainPage.xaml, per definire la UI abbiamo deciso di utilizzare l’elemento Grid che ci permette di creare un layout a griglia per gestire al meglio interfaccia della calcolatrice con elementi Button e Label.
MainPage.xaml.cs
private async void Elaborate(object sender, EventArgs e)
{
if (IsOperator(calcText.Text.Last()))
{
await DisplayAlert("Warning", "Invalid number", "Ok");
return;
}
var expr = new Expression(calcText.Text);
resultText.Text = expr.Evaluate().ToString();
}
In questa parte gestiamo l’inserimento e la validazione dell’espressione aritmetica e in fine anche il calcolo.
Nello screen possiamo vedere il metodo Elaborate che gestisce la parte di validazione dell’espressione aritmetica e il calcolo grazie alla DLL esterna NCalc2:
A destra troviamo la finestra XAML Live Preview, che ci permette di avere un anteprima del layout generato da XAML, cosa molto utile per una creazione interattiva dell’UI:
Questo articolo è basato su materiale e tutorial fornito da:
il mondo digital ha subito una serie di trasformazioni. In questo contesto, la UX (user…
Usa i dati per trasformare il retail: scopri come l'analisi dei dati può personalizzare l'esperienza…
Anticipa le esigenze dei tuoi clienti nel settore e-commerce con l'analisi predittiva. Scopri come migliorare…
Ottimizza la tua supply chain digitale con tecnologie avanzate come AI e IoT. Migliora efficienza…
Scopri le Progressive Web Apps (PWA): la smart alternativa alle app native per e-commerce, offrendo…
Massimizza le vendite e-commerce integrando social, email, negozi fisici e app mobile. Scopri strategie pratiche…