Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Visão Geral

Painel
titleXamarin.Forms

O Xamarin.Forms geralmente é usado para desenvolver aplicativos multiplataforma nativos. Basicamente, o Xamarin.Forms é uma camada de abstração que permite a interação do código compartilhado com o código da plataforma subjacente do Android, iOS e Windows.

Usando o Xamarin.Forms, um desenvolvedor de aplicativo móvel multiplataforma pode economizar tempo de desenvolvimento escrevendo toda a lógica de negócios em um único idioma. Quase 90% do código necessário para desenvolver um aplicativo é compartilhado entre plataformas, permitindo que você obtenha desempenho nativo e a mesma aparência em cada uma delas.

Painel
title.NET MAUI

Como você sabe, a interface do usuário do aplicativo multiplataforma .NET é popularmente conhecida como .NET MAUI. Ele é usado para criar aplicativos multiplataforma nativos com .NET para Android, iOS, macOS e Windows. O .NET MAUI é construído sobre o Xamarin.Forms, evoluindo a plataforma para o próximo nível.

Com o .NET MAUI, a Microsoft inicia uma jornada para criar uma plataforma .NET unificada como uma única classe base para .NET Core e Mono/Xamarin juntos.

Painel
titleSemelhenças

Como o .NET MAUI é uma evolução do Xamarin.Forms, eles têm a maioria de seus recursos em comum. É possível obter quase tudo que o Xamarin possui no .NET MAUI, como controles, layouts, Shell, gestures, templates e APIs multiplataforma para recursos de dispositivo.


Não é necessário reescrever os aplicativos Xamarin.Forms para migra-los para o .NET MAUI. No entanto, será preciso fazer algumas alterações de código em cada aplicativo. Da mesma forma, é possível utilizar os recursos de projeto único sem mesclar todos os projetos do Xamarin.Forms em um projeto. Para iniciar a migração, siga os seguintes passos:

  • Passo 1
  • Passo 2
  • Passo 3
  • Passo 4

Criando uma Nova Solução

Visão geral

Para migrar o aplicativo Xamarin.Forms, crie uma nova solução MAUI.

Informaçõeswarning

Certifique-se de que o novo nome da solução corresponda ao namespace raiz do aplicativo existente. 

Isso garantirá o mínimo de conflito possível ao importar os componentes existentes.

...

Expandir
titleTeste
Painel
titleTeste2
Aviso

...

Teste2



Exibir filhos

Visual Studio 2022

Criar um novo projeto com o modelo padrão .NET MAUI App.

...

  • Copie as fontes do aplicativo Xamarin.Forms existente para a pasta Resources\Fonts em seu projeto MAUI. 

Image Modified


  • Certifique-se de que a propriedade "Build Action" esteja definida como MauiFont:

Image Modified


  • Atualize o arquivo MauiProgram.cs para incluir as fontes migradas:

    Bloco de código
    languagec#
    themeRDark
    titleCódigo
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder.UseMauiApp<App>()
            .ConfigureEffects(
                effects =>
                {
                })
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
    
                fonts.AddFont("NunitoSans-Bold.ttf", "NunitoSansBold");
                fonts.AddFont("NunitoSans-ExtraLight.ttf", "NunitoSansExtraLight");
                fonts.AddFont("NunitoSans-Regular.ttf", "NunitoSansRegular");
                fonts.AddFont("Nunito-SemiBold.ttf", "NunitoSemiBold");
            })
            .UseMauiCommunityToolkit();
            return builder.Build();
        }
    }

...

  • Copie as fontes do aplicativo Xamarin.Forms existente para a pasta Resources\Images em seu projeto MAUI.

Image Modified


  • Certifique-se de que a propriedade "Build Action" esteja definida como MauiImage:

Image Modified

Controles Personalizados

O .NET MAUI Entry é um controle de entrada de texto, que implementa a interface IEntry. No iOS, o EntryHandler mapeia o Entry para o controle nativo UITextField. No Android, o Entry é mapeado para um AppCompatEditText, e no Windows o Entry é mapeado para um TextBox, como é mostrado na figura abaixo:

...

  • Crie um arquivo correspondente ao controle na pasta de sua plataforma:

...

Image Added


  • Altere os namesapces correspondentes e remova o assembly ExportRenderer:

    Bloco de código
    languagec#
    themeRDark
    titleExemplo
    using Android.Content;
    using Microsoft.Maui.Controls.HandlersCompatibility.Platform.CompatibilityAndroid;
    using Microsoft.Maui.Controls.Platform.Compatibility;
    
    //[assembly: ExportRenderer(typeof(ShellRMSCustomEntry), typeof(RMSBadgeShellRendererRMSCustomEntryRenderer))]
    namespace MinhaQualidadeRMLib.Android.Renderers
    {
        public class RMSBadgeShellRendererRMSCustomEntryRenderer : ShellRendererEntryRenderer
        {
            public RMSBadgeShellRendererRMSCustomEntryRenderer(Context context) : base(context)
            {
            }
    
            protected override IShellItemRenderervoid CreateShellItemRenderer(ShellItem shellItem) =>OnElementChanged(ElementChangedEventArgs<Entry> e)
            {
                base.OnElementChanged(e);
                new RMSBadgeShellItemRenderer(thisControl?.SetBackgroundColor(global::Android.Graphics.Color.Transparent);
            }
        }
    }


  • Inclua o trecho de código a seguir no arquivo MauiProgram.cs (linha 13-19): 

    Bloco de código
    languagec#
    themeRDark
    titleCódigo
    linenumberstrue
    using CommunityToolkit.Maui;
    using Microsoft.Maui.Controls.Compatibility.Hosting;
    using MinhaQualidadeRMLib.Android.Renderers;
    using RMLib.Custom;
    
    namespace MinhaQualidade;
    
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder.UseMauiApp<App>()
            .UseMauiCompatibility()
            .ConfigureMauiHandlers(handlers =>
            {
    #if ANDROID
                handlers.AddCompatibilityRenderer(typeof(ShellRMSCustomEntry), typeof(RMSBadgeShellRendererRMSCustomEntryRenderer));
    #endif
            })
            .ConfigureEffects(effects =>
            {
    
            })
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
    
                fonts.AddFont("NunitoSans-Bold.ttf", "NunitoSansBold");
                fonts.AddFont("NunitoSans-ExtraLight.ttf", "NunitoSansExtraLight");
                fonts.AddFont("NunitoSans-Regular.ttf", "NunitoSansRegular");
                fonts.AddFont("Nunito-SemiBold.ttf", "NunitoSemiBold");
            })
            .UseMauiCommunityToolkit();
            return builder.Build();
        }
    }

...