# .NET MAUI em 2026: Desenvolvimento Multiplataforma e Perguntas de Entrevista > Tutorial de .NET MAUI para 2026: construir aplicativos multiplataforma com .NET 10, handlers, MVVM, HybridWebView. Inclui perguntas de entrevista com respostas detalhadas. - Published: 2026-06-01 - Updated: 2026-06-01 - Author: SharpSkill - Tags: .net maui, multiplataforma, tutorial, entrevista, migração xamarin, .net 10, desenvolvimento mobile - Reading time: 11 min --- .NET MAUI (Multi-platform App UI) se consolidou como um framework multiplataforma de nível produção com o .NET 10. Lançado como uma versão Long-Term Support com suporte até novembro de 2028, o .NET MAUI 10 é distribuído como workload e pacotes NuGet, entregando melhorias em qualidade, desempenho e novas APIs como os aprimoramentos do HybridWebView e SafeAreaEdges. Este tutorial aborda a construção de um aplicativo multiplataforma, a arquitetura que faz o MAUI funcionar, e as perguntas de entrevista que os times de contratação fazem em 2026. > **.NET MAUI 10 LTS** > > O .NET 10 é uma versão Long-Term Support (com suporte até novembro de 2028). O MAUI 10 prioriza qualidade e desempenho em vez de novos controles de UI — tornando-o a versão mais estável do MAUI até o momento. Agora é distribuído como workload do .NET e pacotes NuGet, permitindo o versionamento fixo por projeto. ## Configurando um Projeto .NET MAUI 10 do Zero O caminho mais rápido para um aplicativo MAUI funcional começa com a CLI do .NET. O .NET 10 introduz um template de projeto atualizado que inclui as configurações padrão do .NET Aspire, conectando telemetria e descoberta de serviços nativamente. ```bash # Instalar o workload MAUI (se ainda não estiver presente) dotnet workload install maui # Criar um novo aplicativo MAUI dotnet new maui -n CrossPlatformDemo cd CrossPlatformDemo # Executar no emulador Android dotnet build -t:Run -f net10.0-android ``` A estrutura de projeto único consolida o código específico de cada plataforma em uma pasta `Platforms/` enquanto compartilha o restante. O arquivo `MauiProgram.cs` serve como raiz de composição — é onde os serviços, fontes e handlers são registrados. ```csharp // MauiProgram.cs using Microsoft.Extensions.Logging; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); }); // Register services for dependency injection builder.Services.AddSingleton(); builder.Services.AddTransient(); #if DEBUG builder.Logging.AddDebug(); #endif return builder.Build(); } } ``` A injeção de dependências no MAUI segue o mesmo padrão do ASP.NET Core. Serviços Singleton persistem durante toda a vida do aplicativo, serviços Transient são criados a cada solicitação, e serviços Scoped — embora disponíveis — requerem cautela porque o MAUI não tem um conceito de escopo integrado como as requisições HTTP. ## Handlers: A Arquitetura por Trás da Renderização Multiplataforma O MAUI substituiu os renderers do Xamarin.Forms por uma arquitetura de handlers. Os handlers mapeiam cada controle multiplataforma para sua contraparte nativa através de uma camada de abstração fina. A diferença-chave: handlers são sem estado e desacoplados da view virtual, tornando-os mais rápidos e fáceis de personalizar. ```csharp // CustomEntryHandler.cs — Customizing the Entry control on Android using Microsoft.Maui.Handlers; public class CustomEntryHandler : EntryHandler { protected override void ConnectHandler(MauiAppCompatEditText platformView) { base.ConnectHandler(platformView); // Remove the default underline on Android platformView.SetBackgroundColor(Android.Graphics.Color.Transparent); } } // Register in MauiProgram.cs builder.ConfigureMauiHandlers(handlers => { handlers.AddHandler(); }); ``` No .NET 10, os controles Entry e Editor no Android mudaram de `AppCompatEditText` para `MauiAppCompatEditText`, adicionando suporte nativo para o evento `SelectionChanged`. Os handlers aprimorados de CollectionView e CarouselView introduzidos no .NET 9 agora são os padrão no iOS e Mac Catalyst, resolvendo problemas de estabilidade que existiam há bastante tempo. ## MVVM com CommunityToolkit.Mvvm: Eliminando Código Repetitivo O gerador de código-fonte [CommunityToolkit.Mvvm](https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/) elimina aproximadamente 80% da cerimônia MVVM. Sem implementação manual de `INotifyPropertyChanged`, sem wrappers de comando — os atributos controlam a geração de código. ```csharp // MainViewModel.cs using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; public partial class MainViewModel : ObservableObject { private readonly IApiService _apiService; public MainViewModel(IApiService apiService) { _apiService = apiService; } // Source generator creates the 'Title' property with change notification [ObservableProperty] private string _title = string.Empty; // Source generator creates the 'IsLoading' property [ObservableProperty] private bool _isLoading; // Source generator creates an async ICommand [RelayCommand] private async Task LoadDataAsync() { IsLoading = true; try { Title = await _apiService.FetchTitleAsync(); } finally { IsLoading = false; } } } ``` O XAML faz binding diretamente nas propriedades e comandos gerados: ```xml