Создание графического интерфейса

Определение приложения на .NET MAUI

Последнее обновление: 13.12.2022

MauiProgram

Точкой входа в приложение .NET Maui является класс, который по умолчанию называется MauiProgram и который располагается в стандартном проекте в файле MauiProgram.cs.

Класс MauiApp и метод CreateMauiApp в приложении на .NET MAUI и C#

По умолчанию он имеет следующий код:

using Microsoft.Extensions.Logging;

namespace HelloApp
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });

#if DEBUG
    		builder.Logging.AddDebug();
#endif

            return builder.Build();
        }
    }
}

Данный класс определяет только один метод - CreateMauiApp(), который призван создать объект приложения MAUI - объект MauiApp. Затем каждая платформа вызывает данный метод и таким образом создает приложение, после чего мы сможем с ним взаимодействовать на экране смартфона или десктопа.

MauiAppBuilder

Для создания объекта MauiApp применяется билдер - класс MauiAppBuilder, который возвращается статическим методом MauiApp.CreateBuilder() и который позволяет настроить отдельные аспекты приложения MAUI.

var builder = MauiApp.CreateBuilder();  // MauiAppBuilder

В частности, MauiAppBuilder определяет следующие методы:

  • UseMauiApp: устанавливает класс, который и определяет визуальный интерфейс и логику приложения. Данный класс должен представлять тип Microsoft.Maui.IApplication (в данном случае класс App наследуется от класса Application, который реализует интерфейс IApplication)

  • ConfigureContainer: устанавливает фабрику провайдера сервисов

  • ConfigureAnimations: устанавливает применяемые анимации

  • ConfigureEffects: устанавливает глобальные эффекты приложения

  • ConfigureFonts: настраивает глобальные шрифты приложения

  • ConfigureEssentials: устанавливает ряд настроек приложения, в частности, версионирование и ключ для картографических сервисов

  • ConfigureImageSources: переопределяет источник изображений

  • ConfigureMauiHandlers: устанавливает кастомные обработчик для событий визуальных элементов

  • LoadFromXaml: загружает определение интерфейса из файла xaml

Кроме того, класс MauiAppBuilder имеет ряд свойств:

  • Configuration: позволяет управлять конфигурацией приложения

  • Services: устанавливает сервисы приложения

  • Logging: устанавливает настройки логгирования

В коде приложения по умолчанию применяются только два из вышеперечисленных методов:

builder
	.UseMauiApp<App>()
	.ConfigureFonts(fonts =>
	{
		fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
		fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
	})

В данном случае в качестве класса, который устанавливает интерфейс и логику приложения, применяется класс App. Кроме того, также добавляются два шрифта, которые можно найти в проекте в папке Resources/Fonts

После того, как все настройки приложения установлены, добавляется возможность логгирования, когда приложение находится в процессе отладки:

#if DEBUG
		builder.Logging.AddDebug();
#endif

И в конце выполняется создание объекта приложения MauiApp методом Build:

return builder.Build();

Таким образом, для создания минимального приложения Maui достаточно вызывать метод UseMauiApp(), который типизируется типом, который реализует интерфейс IApplication:

namespace HelloApp;

public static class MauiProgram
{
	public static MauiApp CreateMauiApp()
	{
		MauiAppBuilder builder = MauiApp.CreateBuilder();
		builder.UseMauiApp<App>();
		return builder.Build();
	}
}

Класс App

MauiAppBuilder при создании объекта MauiApp с помощью метода UseMauiApp() устанавливает класс, который определяет визуальный интерфейс приложения. Данный класс должен представлять реализацию интерфейса Microsoft.Maui.IApplication

using System.Collections.Generic;

namespace Microsoft.Maui
{
	public interface IApplication : IElement
	{
		IReadOnlyList<IWindow> Windows { get; }

		IWindow CreateWindow(IActivationState? activationState);

		void OpenWindow(IWindow window);

		void CloseWindow(IWindow window);

		void ThemeChanged();

		AppTheme UserAppTheme { get; }
	}
}

Этот интерфейс определяет два свойства и четыре метода, главным образом, для управления окнами приложения.

В проекте Maui по умолчанию уже определяется подобный класс, который реализует данный интерфейс, - класс App. Если быть точнее, класс App наследуется от класса Application, который реализует интерфейс IApplication.

Класс App и MauiApp в приложении .NET Maui и C#

Определение класса App разбито на два файла: App.xaml и App.xaml.cs. Файл App.xaml призван в xml-подобной форме определить используемые ресурсы. Например, откроем его код:

<?xml version = "1.0" encoding = "UTF-8" ?>
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:HelloApp"
             x:Class="HelloApp.App">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Styles/Colors.xaml" />
                <ResourceDictionary Source="Resources/Styles/Styles.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Далее мы более подробно разберем использование ресурсов. Но если вкратце в данном случае для определения приложения определяется элемент <Application>. Внутри этого элемента с помощью элемента <ResourceDictionary> задается добавление определенного ресурса. Так, в данном случае добавляются два ресурса - файлы Colors.xaml и Styles.xaml, которые располагаются в проекте в папке Resources/Styles и которые задают стилевые настройки.

Ресурсы в классе App в приложении на .NET MAUI и C#

Непосредственно сам класс App определен в файле App.xaml.cs:

namespace HelloApp;

public partial class App : Application
{
	public App()
	{
		InitializeComponent();

		MainPage = new AppShell();
	}
}

здесь мы видим, что класс App наследуется от класса Application и содержит только конструктор. В конструкторе сначала вызывается метод InitializeComponent(), благодаря которому класс App получает определение ресурсов приложения из файла App.xaml.

И далее устанавливается свойство MainPage. Через это свойство класс App устанавливает главную страницу приложения, которая и определяет, что мы увидим на экране устройства.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850