Новые возможности .NET MAUI для .NET 8
Основное внимание на .NET MAUI в .NET 8 уделяется качеству. В .NET 8 запросы на вытягивание 1618 были объединены, что закрыло 689 проблем. К ним относятся изменения команды .NET MAUI, а также сообщества .NET MAUI. Эти изменения должны привести к значительному увеличению качества в .NET 8.
Внимание
Благодаря работе с базовыми внешними зависимостями, такими как средства Xcode или Android SDK, политика поддержки многоплатформенного пользовательского интерфейса приложений .NET (.NET MAUI) отличается от политики поддержки .NET и .NET Core. Дополнительные сведения см. в политике поддержки .NET MAUI.
В .NET 8 MAUI поставляется в виде рабочей нагрузки .NET и нескольких пакетов NuGet. Преимущество этого подхода заключается в том, что он позволяет легко закреплять проекты в определенных версиях, а также позволяет легко просматривать нераспроданные или экспериментальные сборки. При создании проекта .NET MAUI необходимые пакеты NuGet автоматически добавляются в проект.
В этой статье перечислены новые возможности .NET MAUI для .NET 8 и ссылки на более подробные сведения о каждом из них.
Дополнительные сведения о новых возможностях .NET 8 см. в статье "Новые возможности.NET 8".
Новые функции
Хотя основное внимание в этом выпуске .NET MAUI является качеством, есть также некоторые новые функции, которые позволяют создавать новые сценарии в приложениях.
Элементы управления
- Элементы управления, поддерживающие методы расширения ввода текста, поддерживающие скрытие и отображение клавиатуры обратимого ввода. Дополнительные сведения см. в разделе "Скрытие и отображение клавиатуры обратимого ввода".
- Класс ContentPage получает HideSoftInputOnTapped свойство, указывающее, будет ли касание в любом месте страницы вызвать скрытие клавиатуры обратимого ввода, если она видна. Дополнительные сведения см. в разделе ContentPage.
- BlazorWebViewStartPath получает свойство, TryDispatchAsync метод и расширенные возможности ведения журнала. Дополнительные сведения см. в разделе "Размещение веб-приложения Blazor" в приложении .NET MAUI с помощью BlazorWebView.
- WebViewUserAgent получает свойство. Дополнительные сведения см. в разделе WebView.
- Встроенное воспроизведение видео HTML5, включая автозапуск и изображение на рисунке, по умолчанию было включено для WebView iOS. Дополнительные сведения см. в разделе "Настройка параметров воспроизведения мультимедиа" в iOS и Mac Catalyst.
- Перегрузка
Grid.Add
, принимающую 5 аргументов, была добавлена обратно в .NET MAUI. Однако этот метод устарел и доступен только для помощи в миграции из Xamarin.Forms. - GridAddWithSpan получает метод расширения, который добавляет представление в Grid указанную строку и столбец с указанными диапазонами строк и столбцов.
Персональный компьютер
- Элементы строки меню и элементы контекстного меню можно вызывать с помощью сочетаний клавиш, известных как акселераторы клавиатуры. Дополнительные сведения см. в статье об акселераторах клавиатуры.
- Приложения Windows можно публиковать как распакованные приложения. Дополнительные сведения см. в статье "Публикация непакованного приложения .NET MAUI для Windows с помощью ИНТЕРФЕЙСА командной строки".
Распознаватели жестов
- PointerGestureRecognizerдостиженияPointerPressedCommand, PointerPressedCommandParameterPointerReleasedCommandPointerReleasedCommandParameter свойства и PointerPressed PointerReleased события. Дополнительные сведения см. в разделе "Распознавание жеста указателя".
- Объект PointerEventArgs , который сопровождает события указателя, вызванные PointerGestureRecognizer классом PlatformArgs , получает свойство типа PlatformPointerEventArgs. Это свойство предоставляет доступ к аргументам конкретной платформы для события жеста указателя. Дополнительные сведения см. в разделе "Распознавание жеста указателя".
- ОбъектыDragStartingEventArgs, DragEventArgsDropEventArgsкоторые сопровождают события жестов перетаскивания и DropCompletedEventArgs перетаскивания, получают
PlatformArgs
свойство. Это свойство предоставляет доступ к аргументам конкретной платформы для события перетаскивания или перетаскивания. Дополнительные сведения см. в разделе "Распознавание жеста перетаскивания". - Положение, в котором произошло жест перетаскивания, можно получить путем вызова GetPosition метода в объекте DragEventArgsили DragStartingEventArgsDropEventArgs объекте. Дополнительные сведения см. в разделе "Распознавание жеста перетаскивания".
- Класс TapGestureRecognizer получает возможность обрабатывать вторичные касания в Android. Дополнительные сведения см. в разделе "Распознавание жеста касания".
Область
- Навигация оболочки получает перегрузку GoToAsync , которая позволяет передавать данные навигации с одним использованием, которые очищаются после того, как навигация была выполнена ShellNavigationQueryParameters в качестве объекта. Дополнительные сведения см. в статье Pass single use object-based navigation data.
Интеграция платформы
- Класс Geolocation может прослушивать изменения расположения, когда приложение находится на переднем плане. Дополнительные сведения см. в разделе "Прослушивание изменений расположения".
- Flashlight получает метод, определяющий IsSupportedAsync , доступен ли фонарик на устройстве. Дополнительные сведения см. в разделе "Фонарик".
- SensorSpeed интервалы были унифицированы на всех платформах. Дополнительные сведения см. в разделе "Доступ к датчикам устройств".
- Класс Permissions получает Permissions.Bluetooth разрешение, которое является разрешением Android 12 для поиска устройств Bluetooth, что делает текущее устройство обнаруживаемым на других устройствах Bluetooth и обмен данными с уже сопряженными устройствами Bluetooth. Дополнительные сведения см. в разделе Разрешения.
- Класс Permissions получает Permissions.NearbyWifiDevices разрешение, которое является разрешением Android 13 для доступа к близлежащим устройствам WiFi. Дополнительные сведения см. в разделе Разрешения.
XAML
- Атрибут
x:ClassModifier
можно указать в классах XAML, чтобы управлять уровнем доступа для созданного класса в сборке. Дополнительные сведения см. в разделе модификаторов классов. - Ресурсы, определенные в объекте
AppThemeBinding
DynamicResource
, ResourceDictionary также могут использоваться в расширении разметки. Дополнительные сведения см. в разделе "Определение и использование ресурсов темы". - Color
ContentProperty
SolidColorBrush— это класс, поэтому не требуется явно задавать из XAML.
Устранение неполадок
- Для устранения неполадок можно отключить создание ресурсов. Дополнительные сведения см. в разделе "Отключение упаковки изображений", "Отключить упаковку экрана-заставки", "Отключить упаковку шрифтов" и "Отключить упаковку файлов ресурсов".
- Для устранения неполадок можно создать пустой экран-заставку. Дополнительные сведения см. в разделе "Создание пустого экрана-заставки".
- Изменение размера проверяет наличие повторяющихся имен файлов изображения. Дополнительные сведения см. в статье об ошибках с повторяющимися именами файлов изображений.
Разное
- Управление окнами можно отделить от
App
класса. Дополнительные сведения см. в разделе "Управление окнами Decouple" из класса App. - Несколько системных шрифтов можно легко использовать в приложениях Android. Дополнительные сведения см. в разделе "Использование шрифтов".
- В iOS
MauiUIApplicationDelegate
получаетPerformFetch
метод, который можно переопределить или использовать с помощью делегатаiOSLifecycle.PerformFetch
. Дополнительные сведения см. в разделе о событиях жизненного цикла платформы iOS и Mac Catalyst.
Удаление и удаление типов
Не рекомендуется использовать следующие типы или элементы:
- ClickGestureRecognizer больше не поддерживается.
- Не
AutomationProperties.Name
рекомендуется использовать свойства ,AutomationProperties.HelpText
аAutomationProperties.LabeledBy
также присоединенные свойства. - Не FocusChangeRequested рекомендуется. Вместо этого используйте Focus() метод, чтобы попытаться задать фокус на представлении.
Удалены следующие типы или члены:
Application.Properties
Свойство иApplication.SavePropertiesAsync
метод удалены. Сведения о переносе данных свойств приложения в .NET MAUI см. в разделе "Перенос данных из словаря свойств приложения Xamarin.Forms" в параметры .NET MAUI.- Свойство
PhoneDialer.Current
было удалено. Вместо этого используйтеPhoneDialer.Default
. OpenGLView
был удален.
Изменения в работе
Следующее поведение изменилось с предыдущего выпуска:
- Теперь для использования элемента управления из XAML требуется следующее Map
xmlns
объявление пространства имен:xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
- Кэширование изображений отключено в Android при загрузке изображения из потока с
ImageSource.FromStream
помощью метода. Это связано с отсутствием данных, из которых необходимо создать разумный ключ кэша. - На iOS страницы автоматически прокручиваются, когда клавиатура обратимого ввода будет охватывать поле ввода текста, чтобы поле было выше мягкой клавиатуры ввода. Метод
KeyboardAutoManagerScroll.Disconnect
вMicrosoft.Maui.Platform
пространстве имен можно вызвать, чтобы отключить это поведение по умолчанию. МетодKeyboardAutoManagerScroll.Connect
можно вызвать для повторного включения поведения после его отключения. - Изменение цвета вкладки в приложении оболочки на некоторых платформах. Дополнительные сведения см. в разделе Внешний вид вкладок.
- Не обязательно указывать значение свойства
$(ApplicationIdGuid)
сборки в файле проекта приложения. Это связано с тем, что приложения Windows для .NET MAUI больше не требуют GUID в качестве идентификатора приложения, а вместо этого используйте значение свойства сборки$(ApplicationId)
в качестве идентификатора приложения. Таким образом, один и тот же идентификатор приложения обратного формата домена теперь используется на всех платформах, таких как com.mycompany.myapp. - Приложения .NET MAUI Mac Catalyst больше не ограничены 50 элементами меню в строке меню.
- Метод
PlatformImage.FromStream
вMicrosoft.Maui.Graphics
пространстве имен теперь можно использовать для загрузки образов в Windows вместо использованияW2DImageLoadingService
класса. - В Android анимации учитывают параметры системной анимации. Дополнительные сведения см. в разделе "Базовая анимация".
Производительность
В .NET MAUI 8 есть много изменений производительности. Эти изменения можно классифицировать по пяти областям:
- Новые возможности
- Производительность сборки и внутреннего цикла
- Улучшения размера приложения или производительности
- Структуры и
IEquatable
в .NET MAUI - Исправлена проблема с производительностью в
{AppThemeBinding}
- Адрес
CA1307
иCA1309
производительность - Адрес
CA1311
для производительности - Удаление неиспользуемого
ViewAttachedToWindow
события в Android - Удаление ненужных
System.Reflection
для{Binding}
- Использование
StringComparer.Ordinal
дляDictionary
иHashSet
- Сокращение взаимодействия Java в
MauiDrawable
Android - Повышение производительности макета
Label
в Android - Сокращение вызовов взаимодействия Java для элементов управления в .NET MAUI
- Повышение производительности
Entry.MaxLength
в Android - Улучшение использования
CollectionView
памяти в Windows - Использование
UnmanagedCallersOnlyAttribute
на платформах Apple - Быстрое взаимодействие Java для строк в Android
- Ускорение взаимодействия Java для событий C# в Android
- Использование указателей функций для JNI
- Удаленный
Xamarin.AndroidX.Legacy.Support.V4
- Дедупликация универсальных шаблонов в iOS и macOS
- Исправление
System.Linq.Expressions
реализации на платформах, таких как iOS - Установка
DynamicCodeSupport=false
для iOS и Catalyst
- Структуры и
- Утечки памяти
- Инструменты и документация
Дополнительные сведения см. в статье об улучшениях производительности .NET 8 в .NET MAUI.
Обновление с .NET 7 до .NET 8
Чтобы обновить проекты с .NET 7 до .NET 8, установите .NET 8 и рабочую нагрузку .NET MAUI с помощью Visual Studio 17.8+ или с автономным установщиком и командойdotnet workload install maui
.
Затем откройте CSPROJ-файл и измените monikers Целевой платформы (TFMs) с 7 до 8. Если вы используете TFM, например net7.0-ios13.6
обязательно соответствуете версии платформы или полностью удалите ее. В следующем примере показаны TFMs для проекта .NET 7:
<TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst;net7.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
В следующем примере показаны TFMs для проекта .NET 8:
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
Явные ссылки на пакеты также следует добавить в CSPROJ-файл для следующих пакетов NuGet .NET MAUI:
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
Эта $(MauiVersion)
переменная ссылается на установленную версию .NET MAUI. Это можно переопределить, добавив свойство сборки в $(MauiVersion)
CSPROJ-файл :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
<UseMaui>True</UseMaui>
<MauiVersion>8.0.3</MauiVersion>
</PropertyGroup>
</Project>
Это может быть полезно при использовании нерегламентированных сборок из ночного веб-канала или сборок, скачанных из запросов на вытягивание.
Кроме того, $(ApplicationIdGuid)
свойство сборки можно удалить из CSPROJ-файла в .NET 8. Дополнительные сведения см. в разделе "Изменения поведения".
Прежде чем впервые создать обновленное приложение, удалите bin
папки и obj
папки.
Примечание.
Шаблон проекта для приложения .NET MAUI в .NET 8 включает контекст, допускающий значение NULL для проекта, с $(Nullable)
помощью свойства сборки. Дополнительные сведения см. в разделе Nullable.