Создание приложений для Windows с помощью .NET MAUI
Мультиплатформенный пользовательский интерфейс приложений .NET (.NET MAUI) — это кроссплатформенная платформа для создания собственных мобильных и классических приложений с помощью C# и при необходимости XAML. С помощью .NET MAUI можно разрабатывать приложения, которые могут работать в Windows, Android, iOS, macOS и Samsung Tizen из одной общей базы кода. Если вы создаете приложение Windows с помощью .NET MAUI, он будет использовать WinUI 3 в качестве собственной платформы и, следовательно, запускаться в Windows 10 версии 1809 или более поздней версии и Windows 11.
Зачем использовать .NET MAUI в Windows?
Создание приложений для Windows с помощью .NET MAUI обеспечивает несколько преимуществ:
- Нативный интерфейс Windows. .NET MAUI создает приложение WinUI для Windows. Это означает, что в вашем приложении .NET MAUI будет тот же пользовательский интерфейс в Windows, что и в приложениях пакета SDK для приложений для Windows.
- Пользовательский интерфейс в коде: набор средств сообщества .NET MAUI включает разметку C#, набор вспомогательных методов для создания пользовательских интерфейсов в коде C#. Это позволяет разделить проблемы между пользовательским интерфейсом и бизнес-логикой приложения так же, как и с XAML. Разметка C# доступна на всех платформах, поддерживаемых .NET MAUI.
- Кросс-платформенность. Обеспечьте работу своих приложений для Windows на всех поддерживаемых платформах, включая устройства с Android, iOS, macOS и Samsung Tizen.
- Простота. Выполняйте разработку в одном общем проекте, который можно ориентировать на любую платформу, поддерживаемую .NET MAUI.
- Горячая перезагрузка. Экономьте время при отладке благодаря поддержке горячей перезагрузки .NET и горячей перезагрузки XAML в .NET MAUI. Вносите изменения во время работы приложения, и они будут применены автоматически.
- Нативные API-интерфейсы. .NET MAUI предоставляет кросс-платформенные API-интерфейсы для нативных функций на каждой платформе. Для нативных API-интерфейсов, недоступных в кросс-платформенных API-интерфейсах .NET MAUI, вы можете вызвать код для конкретной платформы.
Если вы планируете создать новое приложение для Windows и ориентировать его на дополнительные платформы, рекомендуем использовать .NET MAUI. Если вы ориентируете свое приложение только на Windows, есть некоторые веские причины продолжать использование пакета SDK для приложений для Windows:
- Привычный интерфейс. Между XAML .NET MAUI и XAML пакета SDK для приложений для Windows есть некоторые различия. Если вы привыкли работать с XAML в UWP и пакете SDK для приложений для Windows, вам нужно будет выделить немного времени для изучения элементов управления .NET MAUI и синтаксиса XAML.
- Нативные элементы управления. Сейчас .NET MAUI не поддерживает использование элементов управления пакета SDK для приложений для Windows. Если у вас есть элементы управления из других проектов пакета SDK для приложений для Windows, которые вы планируете повторно использовать, или вы используете сторонние элементы управления либо элементы управления с открытым кодом, вам потребуется найти альтернативные варианты для проектов .NET MAUI.
- Ближе к Windows. При использовании .NET MAUI реализуется приложение пакета SDK для приложений для Windows. Но для перехода от кода к нативному приложению для Windows нужно выполнить определенное преобразование. При использовании пакета SDK для приложений для Windows этот этап преобразования исключается и уменьшается вероятность возникновения проблем со стилями, совместимостью API или макетом.
Ресурсы .NET MAUI для разработчиков Windows
Документация по .NET MAUI
Документация по .NET MAUI содержит ресурсы по разработке с использованием .NET MAUI для каждой платформы, включая Windows.
Документация по WinUI
Изучите документацию по WinUI, чтобы узнать о функциях библиотеки пользовательского интерфейса Windows.
.NET Conf: в центре внимания — MAUI
Это однодневное мероприятие с прямой трансляцией выступлений избранных докладчиков из Майкрософт и сообщества разработчиков .NET MAUI, проводившееся в августе 2022 г. Узнайте, как создавать приложения и получите рекомендации от команды, занимающийся разработкой с использованием .NET MAUI.
Записи блога .NET MAUI
- 5 функций .NET MAUI для создания отличных классических приложений
- Создание собственного приложения podcast с помощью .NET 7, Blazor и .NET MAUI
GitHub
.NET MAUI предоставляется с открытым кодом и размещается на сайте GitHub. Регистрируйте запросы на функции или сообщения об ошибках и общайтесь со специалистами из команды разработчиков в репозитории для .NET MAUI, а также изучайте вики-страницы.
Примеры кода
Изучите примеры кода .NET MAUI в браузере примеров или на сайте GitHub.
Начало работы с .NET MAUI в Windows
Чтобы приступить к работе с .NET MAUI в Windows, установите Visual Studio 2022 версии 17.3 или более поздней версии.
- Скачать 2022 Community
- Скачать 2022 Professional
- Скачать 2022 Enterprise
При установке или изменении Visual Studio выберите рабочую нагрузку разработки многоплатформенного пользовательского интерфейса приложений .NET с выбранными вариантами установки по умолчанию. Дополнительные сведения об управлении рабочими нагрузками в Visual Studio см. в разделе «Изменение рабочих нагрузок, компонентов и языковых пакетов Visual Studio». Если вы используете Visual Studio Code и .NET CLI, вы будете использовать команду dotnet для управления рабочими нагрузками.
Если вы не включили на компьютере режим разработки, см. статью Подготовка устройства к разработке. Если он не включен, Visual Studio предложит включить режим разработки при попытке запустить первый проект .NET MAUI в Windows.
Что такое .NET MAUI?
NET Multi-Platform App UI (.NET MAUI) — это кросс-платформенная платформа для создания собственных мобильных и классических приложений с помощью C# и XAML.
С помощью .NET MAUI можно разрабатывать приложения, которые могут работать на Android, iOS, macOS и Windows из одной общей базы кода.

.NET MAUI является открытым исходным кодом и является эволюцией Xamarin.Forms, расширенной от мобильных до классических сценариев, с элементами управления пользовательским интерфейсом, перестроенными с нуля для повышения производительности и расширяемости. Если вы ранее использовали Xamarin.Forms для создания кроссплатформенных пользовательских интерфейсов, вы заметите множество сходств с .NET MAUI. Однако между ними также есть некоторые различия. С помощью .NET MAUI можно создавать приложения для нескольких платформ в одном проекте и при необходимости добавлять исходный код и ресурсы для конкретной платформы. Одной из основных целей .NET MAUI является возможность реализовать в общей базе кода как можно больше логики и макета пользовательского интерфейса для приложения.
Кто .NET MAUI предназначен для
.NET MAUI предназначен для разработчиков, которые хотят:
- Написание кроссплатформенных приложений в XAML и C#из одной общей базы кода в Visual Studio.
- Совместное использование макета пользовательского интерфейса и разработка на различных платформах.
- Совместное использование кода, тестов и бизнес-логики на разных платформах.
Как работает .NET MAUI
.NET MAUI объединяет API-интерфейсы Android, iOS, macOS и Windows в единый API, который предоставляет разработчикам возможность выполнять однократную запись в любом месте, обеспечивая дополнительный доступ к каждому аспекту каждой собственной платформы.
.NET 6 или более поздней версии предоставляет ряд платформ для создания приложений: .NET Android, .NET iOS, .NET macOS и Windows UI 3 (WinUI 3). Все эти платформы имеют доступ к одной библиотеке базовых классов .NET (BCL). Эта библиотека абстрагирует сведения о базовой платформе от кода. Библиотека BCL имеет зависимость от среды выполнения .NET, в которой выполняется код приложения. Для Android, iOS и macOS среда реализуется Mono, реализация среды выполнения .NET. В Windows .NET CoreCLR предоставляет среду выполнения.
Хотя BCL позволяет приложениям, работающим на разных платформах, совместно использовать общую бизнес-логику, различные платформы имеют различные способы определения пользовательского интерфейса для приложения, а также предоставляют различные модели для указания того, как элементы пользовательского интерфейса взаимодействуют и взаимодействуют. Вы можете создать пользовательский интерфейс для каждой платформы отдельно с помощью соответствующей платформы (.NET Android, .NET iOS, .NET macOS или WinUI 3), но этот подход требует поддержания базы кода для каждого отдельного семейства устройств.
.NET MAUI предоставляет единую платформу для создания пользовательских интерфейсов для мобильных и классических приложений. На следующей схеме показано высокоуровневое представление архитектуры приложения .NET MAUI:

В приложении .NET MAUI вы пишете код, который в основном взаимодействует с API MAUI .NET (1). Затем .NET MAUI использует собственные API платформы (3). Кроме того, код приложения может напрямую выполнять API платформы (2), если это необходимо.
Приложения .NET MAUI можно записывать на ПК или Mac и компилировать в собственные пакеты приложений:
- Приложения Android, созданные с помощью .NET MAUI, компилируются из C# на промежуточный язык (IL), который затем jIT-код компилируется в собственную сборку при запуске приложения.
- Приложения iOS, созданные с помощью .NET MAUI, полностью заранее компилируются из C# в собственный код сборки ARM.
- приложения macOS, созданные с помощью .NET MAUI, используют Mac Catalyst, решение от Apple, которое приносит ваше приложение iOS, созданное с помощью UIKit на рабочий стол, и расширяет его с помощью дополнительных API AppKit и платформы по мере необходимости.
- Приложения Windows, созданные с помощью .NET MAUI, используют библиотеку Пользовательского интерфейса Windows 3 (WinUI 3) для создания собственных приложений, предназначенных для рабочего стола Windows. Дополнительные сведения о WinUI 3 см . в библиотеке пользовательского интерфейса Windows.
Для создания приложений для iOS и macOS требуется Mac.
Какие возможности предоставляет .NET MAUI
.NET MAUI предоставляет коллекцию элементов управления, которые можно использовать для отображения данных, запуска действий, указания действий, отображения коллекций, выбора данных и т. д. Помимо коллекции элементов управления, .NET MAUI также предоставляет следующее:
- Продуманный механизм визуализации для проектирования страниц.
- Несколько типов страницы для создания полнофункциональных типов навигации, таких как панели.
- Поддержка привязки данных для создания более элегантного и удобного в обслуживании кода.
- Возможность настраивать обработчики для улучшения способа представления элементов пользовательского интерфейса.
- Кроссплатформенные API для доступа к собственным функциям устройств. Эти API позволяют приложениям получать доступ к функциям устройств, таким как GPS, акселерометр и состояния батареи и сети. Дополнительные сведения см . в api кроссплатформенных устройствах.
- Кроссплатформенная функциональность графики, которая предоставляет холст рисования, который поддерживает рисование и рисование фигур и изображений, операций создания и преобразования графических объектов.
- Единая система проектов, использующая многоцелевой объект для целевой платформы Android, iOS, macOS и Windows. Дополнительные сведения см. в статье .NET MAUI Single project.
- Горячая перезагрузка .NET, чтобы можно было изменить xaml и управляемый исходный код во время работы приложения, а затем наблюдать за результатом изменений без перестроения приложения. Дополнительные сведения см. в статье о горячей перезагрузке .NET.
Кроссплатформенные API для функций устройств
.NET MAUI предоставляет кроссплатформенные API для собственных функций устройств. Примеры функциональных возможностей, предоставляемых .NET MAUI для доступа к функциям устройства, включают:
- Доступ к датчикам, таким как акселерометр, компас и гиро область на устройствах.
- Возможность проверка состояния сетевого подключения устройства и обнаруживать изменения.
- Укажите сведения об устройстве, на котором запущено приложение.
- Скопируйте и вставьте текст в системный буфер обмена между приложениями.
- Выберите один или несколько файлов с устройства.
- Безопасно храните данные в виде пар «ключ-значение».
- Используйте встроенные подсистемы преобразования текста в речь для чтения текста с устройства.
- Инициируйте потоки проверки подлинности на основе браузера, которые прослушивают обратный вызов на определенный зарегистрированный URL-адрес приложения.
Один проект
Единый проект .NET MAUI принимает возможности разработки для конкретной платформы, которые обычно возникают при разработке приложений и абстрагирует их в один общий проект, который может нацелен на Android, iOS, macOS и Windows.
Единый проект .NET MAUI обеспечивает упрощенную и согласованную кроссплатформенную разработку независимо от целевых платформ. Единый проект .NET MAUI предоставляет следующие возможности:
- Один общий проект, предназначенный для Android, iOS, macOS и Windows.
- Упрощенный выбор целевого объекта отладки для запуска приложений .NET MAUI.
- Общие файлы ресурсов в одном проекте.
- Один манифест приложения, указывающий название, идентификатор и версию приложения.
- Доступ к api-интерфейсам и средствам для конкретной платформы при необходимости.
- Одна кроссплатформенная точка входа приложения.
Единый проект .NET MAUI включен с помощью многоцелевой и использования проектов в стиле SDK. Дополнительные сведения о одном проекте .NET MAUI см. в статье .NET MAUI с одним проектом.
Горячая перезагрузка
.NET MAUI включает поддержку горячей перезагрузки .NET, которая позволяет изменять управляемый исходный код во время работы приложения без необходимости вручную приостановить или попасть в точку останова. Затем изменения кода можно применить к работающему приложению без перекомпиляции.
.NET MAUI также включает поддержку горячей перезагрузки XAML, которая позволяет сохранять файлы XAML и просматривать изменения, отраженные в работающем приложении без повторной компиляции. Кроме того, состояние навигации и данные будут поддерживаться, что позволяет быстро выполнять итерацию в пользовательском интерфейсе без потери места в приложении.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Введение в .NET MAUI
.NET Multi-platform App UI или сокращенно MAUI представляет кроссплатформенный фреймворк от компании Microsoft для создания нативных мобильных и десктопных приложений с использованием языка программирования C# и языка разметки XAML. С помощью .NET MAUI можно разрабатывать приложения под такие операционные системы как Android, iOS, macOS и Windows, используя при этом один и тот же код.

Первая версия MAUI вышла в мае 2022 года, далее в ноябре 2023 года вышли обновления для .NET 8. Однако стоит отметить, что сам фреймворк .NET Multi-platform App UI фактически представляет эволюцию другого фреймворка — Xamarin Forms , который имеет более чем 10-летнюю историю и который с 2016 года был куплен и развивался компанией Microsoft. Поэтому, имя опыт работы с Xamarin Forms, не составит больших проблем перейти на .NET MAUI.
Также стоит отметить, что .NET MAUI — это opensource-фреймворк, код которого можно найти в репозитории на github по адресу https://github.com/dotnet/maui
Зачем использовать .NET Multi-platform App UI, какие преимущества она несет? При разработке приложения сразу под несколько платформ (iOS, Android, Windows, macOS) разработчики сталкиваются со следующими трудностями:
- различие в подходах построение графического интерфейса так или иначе влияет на разработку. Разработчики вынуждены подстраивать приложение под требования к интерфейсу на конкретной платформе
- разные API — различие в программных интерфейсах и реализациях тех или иных функциональностей также требует от программиста учет этих специфических особенностей
- разные платформы для разработки. Например, чтобы создавать приложения для iOS нам необходима соответствующая среда — Mac OS X и ряд специальных инструментов, типа XCode. А в качестве языка программирования выбирается Objective-C или Swift. Для Android мы можем использовать самый разный набор сред — Android Studio, Intellij IDEA, Eclipse и т.д. Но здесь для подавляющего большинства приложений применяется Java или Kotlin. А для создания приложений под Windows используется Visual Studio, а в качестве языков — C#, F#, VB.NET, C++
Такой диапазон платформ, средств разработки и языков программирования не может положительно сказываться на сроках создания приложений, и, в конечном счете, на денежных средствах, выделяемых на разработку. Было бы очень эффективно иметь один инструмент, который позволял легко и просто создавать приложения сразу для всех платформ. И именно таким инструментом и является платформа MAUI .
Преимущества разработки на MAUI:
- В процессе разработки создается единый проект, который использует общий код для всех платформ
- MAUI предоставляет прямой доступ к нативным API каждой платформы, в том числе к аппаратным возможностям платформ
- При создании приложений мы можем использовать платформу .NET и язык программирования C# (а также F#), который является достаточно производительным, и в тоже время ясным и простым для освоения и применения
- Богатая коллекция встроенных элементов управления
- Поддержка привязки данных
- Возможности настройки поведения визуального интерфейса и встроенного функционала
- Богатые возможности по работе с графикой
- Наличие hot reload, что упрощает разработку
Поддерживаемые платформы
На момент написания данной статьи .NET Multi-platform App UI (.NET MAUI) официально поддерживает следующие платформы:
- Android 5.0 (API 21) и выше
- iOS 11 и выше
- macOS 10.15 и выше (с помощью Mac Catalyst)
- Windows 11 and Windows 10 версии 1809 и выше (с использованием WinUI 3).
Кроме того, подсистема .NET MAUI Blazor часть выше поднимает планку поддерживаемых версий:
- Android 7.0 (API 24) и выше
- iOS 14 и выше
- macOS 11 и выше (с помощью Mac Catalyst)
Также неофициально сообществом поддерживается Linux — проект maui-linux. Кроме того, компания Samsung осуществляет поддержку для ОС Tizen.
Как работает MAUI
.NET MAUI объединяет API операционных систем Android, iOS, macOS и Windows в один единый API, который позволяет написать один общий код для всех поддерживаемых операционных систем и при необходимости добавлять для каждой отдельной платформы специфические для нее функциональности. Схематически работу .NET MAUI можно представить следующим образом:

.NET MAUI предоставляет единый фреймворк для создания приложений. Однако в процессе работы он опирается на ряд субплатформ, через которые идет взаимодействие с каждой отдельной операционной системой: .NET for Android, .NET for iOS, .NET for macOS и Windows UI 3 (WinUI 3). И в общем случае код приложения сначала обращается к платформе .NET MAUI, а та затем обращается к субплатформе для конкретной ОС. Хотя фреймворк также позволяет напрямую обращаться коду приложения к этим субплатформам.
Все эти субплатформы работают поверх библиотеки классов .NET Base Class Library (BCL). Эта библиотека позволяет абстрагироваться от деталей реализации конкретной платформы и зависит от среды выполнения .NET, в которой выполняется код. Для Android, iOS и macOS среду выполнения для приложения предоставляет фреймворк Mono (реализация .NET). На Windows среда выполнения предоставляется .NET CoreCLR.
Таким образом, разработчик может определить общую единую логику для приложения для каждой отдельной платформы. И также при необходимости может задействовать специфические для каждой платформы функциональности.
Инструменты разработки
Разрабатывать приложения формально можно на Windows и MacOS. Однако если стоит задача разрабатывать приложения под iOS и MacOS, то для этого необходим MacOS.
В качестве среды разработки используется Visual Studio 2022 и выше. На MacOS в этом случае используется Visual Studio Code.
Установка .NET MAUI
Чтобы разрабтывать в Visual Studio приложения на платформе .NET MAUI в программе для установщика Visual Studio необходимо выбрать и установить элемент Разработка с помощью .NET Multi-Platform App UI «Разработка мобильных приложений на .NET»:
Вопросы с меткой [maui]
.NET Multi-platform App UI (MAUI) — кросплатформенный инструмент для создания мобильных и десктопных интерфейсов, поддерживающий платформы Android, iOS, macOS, Windows и Tizen. .NET MAUI это наследник Xamarin.Forms, скорее являющийся частью экосистемы .NET, чем просто отдельной библиотекой.
64 вопроса
Конкурсные
Неотвеченные
- Конкурсные 0
- Неотвеченные
- Цитируемые
- Рейтинг
- Неотвеченные (мои метки)
15 показов
DragGestureRecognizer без удержания на элементе
Я хочу сделать так, чтобы перетаскивание элемента срабатывало без удержания пальца на элементе, просто при обычном нажатии. То есть я просто прикоснулся к элементу и сразу начал его переносить.
задан 20 часов назад
Что лучше учить для разработки под Windows [закрыт]
Я учу c# и хочу научиться писать десктопные приложения под Windows. Что для этого лучше учить? По итогу я понял, что сейчас наиболее известные это Windows Forms, WPF, MAUI. Что лучше учить на будущее? .
задан вчера
Как настроить группировку RadioButton в DataTemplate
Я разрабатываю программу динамического конструктора тестов. Для динамического создания и изменения элементов дизайнера используются CollectionView и комбинированный DataTemplate, который определяется .
задан 31 дек 2023 в 6:49
28 показов
Как не закрывать iOS приложение на .NET MAUI при необработанном исключении?
Я реализовал глобальный обработчик исключений, который в случае любого необработанного исключения не закрывает приложение, а отображает сообщение пользователю, что произошла какая-нибудь ошибка, после .
задан 17 дек 2023 в 11:40
35 показов
C# MAUI свернуть в трей приложение Windows
Приложение на C# MAUI. Не могу найти решения как свернуть приложение в трей ОС Windows. Решения только для WinForms и WPF. Свернуть с отображением в панели задач — без проблем: private void doMinimize(.
задан 10 дек 2023 в 12:47
47 показов
Specified cast is not valid
Возникает ошибка при вызове команды. Запускал этот код на WPF все нормально, а на MAUI выдает эту ошибку. private void createQuestionCheckBoxItems() < AddAnyQuestion(new .
задан 8 дек 2023 в 8:43
Фильтрация источника данных Binding для вывода [дубликат]
У меня есть ListView с привязкой на ObservableCollection <Класс>Buses представляющий из себя коллекцию объектов состоящих из нескольких string var представленных как _NameEnded, _NameMarshrut, .Класс>
задан 7 дек 2023 в 16:51
TapGestureRecognizer мешает работе PanGestureRecognizer
В моем коде я считываю перемещение пальца по определенной области, с помощью PanGestureRecognizer. И у меня появилась проблема, дело в том что, при двойном нажатии не вызывается ивент .
задан 29 ноя 2023 в 4:07
15 показов
Не получается воспроизвести файл с локального ноителя с помощью Media Element .NET MAUI
Сам Media Element работает без ошибок, видео ролик приведенный в обучалке воспроизводит. Но какие либо файлы отказывается воспроизводить. Пробовал
задан 27 ноя 2023 в 7:06
Локализация MAUI IOS
Добавил файлы ресурсов AppResources.resx и AppResources.ru.resx. Выбрал нейтральный язык
задан 13 ноя 2023 в 17:50
17 показов
При клике по dismissalText в Snackbar создается новый экземпляр Window
Начал изучать MAUI и столкнулся с такой проблемой: при клике по клавише отмены в Snackbar создается новый экземпляр приложения в Windows, на андроид все работает корректно. private async void OnCreate(.
задан 8 ноя 2023 в 21:38
27 показов
Не удаётся опубликовать проект на .NET MAUI если использовать собственный генератор кода
Я написал собственный генератор кода, который прекрасно работает в сборках Debug/Release, но по какой-то причине он вызывает ошибку при публикации проекта для Windows: файл ресурсов «E:\.
задан 5 ноя 2023 в 19:09
38 показов
Как прикрепить элемент к нижней границе приложения MAUI?
Не нашел в решений в интернете, вот что у меня есть:
задан 20 сен 2023 в 18:55
66 показов
дождаться результата выполнения модальной страницы
Пытаюсь раскурить пресловутый xamarin, и. застрял. Суть — вызываю страницу через Navigation.PushModalAsync, и хочу дождаться результат выполнения. пробывал: private async void btn_Clicked(object .
задан 11 сен 2023 в 11:17
Как исправить утечку памяти в CollectionView на Windows?
Я заметил, что если быстро крутить CollectionView вверх вниз, то будет происходить утечка памяти. Особо заметно это тогда, когда в ItemTemplate у вас находится Image. Это доходит до того, что .