Последние заметки о выпуске экспериментального канала для пакета SDK для приложений Windows
Внимание
Экспериментальный канал не поддерживается для использования в рабочих средах, а приложения, использующие экспериментальные выпуски, не могут быть опубликованы в Microsoft Store.
Экспериментальный канал включает выпуски пакета SDK для приложений Windows с функциями экспериментального канала на ранних этапах разработки. API для экспериментальных функций имеют экспериментальный атрибут. При вызове экспериментального API в коде вы получите предупреждение во время сборки. Все API-интерфейсы в экспериментальном канале подвергаются обширным исправлениям и критическим изменениям. Экспериментальные функции и API могут быть удалены из последующих выпусков в любое время.
Важные ссылки:
- Если вы хотите обновить существующее приложение с более старой версии пакета SDK для приложений Windows до более новой версии, ознакомьтесь с обновлением существующих проектов до последнего выпуска пакета SDK для приложений Windows.
- Документация по экспериментальным выпускам см. в разделе "Установка средств для предварительной версии и экспериментальных каналов" пакета SDK для приложений Windows.
Архив заметки о выпуске экспериментального канала:
- Заметки о выпуске экспериментального канала для пакета SDK для приложений Windows 1.5
- Заметки о выпуске экспериментального канала для пакета SDK для приложений Windows 1.4
- Заметки о выпуске экспериментального канала для пакета SDK для приложений Windows 1.3
- Заметки о выпуске экспериментального канала для пакета SDK для приложений Windows 1.2
- Заметки о выпуске экспериментального канала для пакета SDK для приложений Windows 1.0
- Заметки о выпуске экспериментального канала для пакета SDK для приложений Windows 0.8
Экспериментальная версия 1.6 (1.6.0-experimental1)
Это последний выпуск экспериментального канала.
Чтобы скачать, перенаправьте версию 1.6.240531000-experimental1
NuGet WinAppSDK в .
Обязательные изменения проекта C# для 1.6-экспериментальных
В 1.6-экспериментальной версии управляемые приложения windows App SDK требуют Microsoft.Windows.SDK.NET.Ref*.*.*.35-preview
(или более поздней версии), которые можно указать с помощью WindowsSdkPackageVersion в файлеcsproj
. Например:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows10.0.22621.0</TargetFramework>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<WindowsSdkPackageVersion>10.0.22621.35-preview</WindowsSdkPackageVersion>
<PropertyGroup>
...
Кроме того, управляемые приложения пакета SDK для Приложений Windows с помощью C#/WinRT должны обновляться до Microsoft.Windows.CsWinRT2.1.0-prerelease.240602.1
(или более поздней версии).
Поддержка собственного AOT
Теперь свойство проекта .NET PublishAot
поддерживается для собственной компиляции "Впереди времени". Дополнительные сведения см. в разделе "Собственное развертывание AOT". Поскольку AOT основывается на поддержке Обрезки, большая часть следующих рекомендаций, связанных с обрезкой, также применяется к AOT.
Для PublishAot
поддержки в дополнение к изменениям проекта C#, описанным в предыдущем разделе, также потребуется ссылка на пакет Microsoft.Windows.CsWinRT2.1.0-prerelease.240602.1
(или более поздней версии), чтобы включить генератор источника из этого пакета.
Так как пакет SDK для приложений Windows вызывает целевые объекты публикации при развертывании F5, рекомендуется включить PublishAot
во время восстановления NuGet, добавив его в csproj
файл:
<PublishAot Condition="'$(ExcludeRestorePackageImports)'=='true'">true</PublishAot>
Кроме того, рекомендуется условно включить PublishAot
при публикации конфигураций выпуска либо в профилях публикации, либо в проекте:
<PublishAot Condition="'$(Configuration)'=='Release'">true</PublishAot>
Устранение проблем AOT
В этом выпуске разработчик отвечает за обеспечение правильности корня всех типов, чтобы избежать обрезки (например, с целевыми объектами на основе {Binding}
отражения). Более поздние выпуски расширят возможности C#/WinRT и компилятора XAML, чтобы автоматизировать корневую обработку, где это возможно, оповещения разработчиков обрезанию рисков и предоставляют механизмы для устранения.
Разделяемые классы
C#/WinRT также включает PublishAot
поддержку в версии 2.1.0-prerelease.240602.1. Чтобы включить класс для публикации AOT с помощью C#/WinRT, сначала его необходимо пометить partial
. Это позволяет исходному анализатору C#/WinRT AOT атрибутировать классы для статического анализа. Для этого атрибута требуются только классы (содержащие методы, целевые объекты обрезки).
Методы без отражения
Чтобы обеспечить совместимость AOT, методы на основе отражения следует заменить статически типизированной сериализацией, AppContext.BaseDirectory, typeof() и т. д. Дополнительные сведения см. в разделе "Общие сведения об обрезке предупреждений".
Типы корневых элементов
Пока не будет реализована полная поддержка{Binding}
, типы могут быть сохранены от обрезки следующим образом: учитывая сборкуA
, используюющую проект P
с типом T
в пространстве N
имен, который только динамически ссылается (поэтому обычно обрезанный), T
можно сохранить с помощью:
P.csproj
:
<ItemGroup>
<TrimmerRootDescriptor Include="ILLink.Descriptors.xml" />
</ItemGroup>
ILLink.Descriptors.xml
:
<?xml version="1.0" encoding="utf-8"?>
<linker>
<assembly fullname="A">
<type fullname="N.T" preserve="all" />
</assembly>
</linker>
Полный синтаксис xml-выражений корневого дескриптора см. в разделе "Корневые дескрипторы".
Примечание.
Пакеты зависимостей, которые еще не приняли поддержку AOT, могут столкнуться с проблемами среды выполнения.
Улучшенный разрыв вкладки TabView
TabView
поддерживает новый CanTearOutTabs
режим, который предоставляет расширенный интерфейс для перетаскивания вкладок и перетаскивания в новое окно. Если этот новый параметр включен, перетаскивание вкладок очень похоже на режим перетаскивания вкладок в Edge и Chrome, где новое окно сразу же создается во время перетаскивания, что позволяет пользователю перетаскивать его на край экрана, чтобы развернуть или привязать окно в одном плавном движении. Эта реализация также не использует API перетаскивания, поэтому это не влияет на какие-либо ограничения в этих API. В частности, разрыв вкладки поддерживается в процессах, работающих с повышенными привилегиями от имени администратора.
Известная проблема: в этом выпуске поведение ввода CanTearOutTabs
указателя неверно для мониторов с коэффициентом масштабирования, отличающимся от 100%. Это будет исправлено в следующем выпуске 1.6.
Новый элемент управления TitleBar
Новый TitleBar
элемент управления упрощает создание отличной настраиваемой панели заголовков для приложения со следующими функциями:
- Настраиваемые свойства значка, заголовка и субтитров
- Встроенная кнопка "Назад"
- Возможность добавления пользовательского элемента управления, например поля поиска
- Автоматическое скрытие и отображение элементов на основе ширины окна
- Доступность для отображения состояния активного или неактивного окна
- Поддержка функций панели заголовков по умолчанию, включая перетаскиваемые регионы в пустых областях, скорость отклика темы, кнопки заголовка по умолчанию (min/max/close) и встроенную поддержку специальных возможностей
Элемент TitleBar
управления предназначен для поддержки различных сочетаний заголовков, что делает его гибким для создания интерфейса, который требуется без необходимости писать большой объем пользовательского кода. Мы приняли отзывы от прототипа панели набора средств сообщества и с нетерпением ждем дополнительных отзывов!
Известная проблема: в этом выпуске отображается только значок и заголовок из-за проблемы, TitleBar
из-за которой некоторые элементы не отображаются при загрузке. Чтобы обойти эту проблему, используйте следующий код, чтобы загрузить другие элементы (подзаголовок, заголовок, содержимое и нижний колонтитул):
public MainWindow()
{
this.InitializeComponent();
this.ExtendsContentIntoTitleBar = true;
this.SetTitleBar(MyTitleBar);
MyTitleBar.Loaded += MyTitleBar_Loaded;
}
private void MyTitleBar_Loaded(object sender, RoutedEventArgs e)
{
// Parts get delay loaded. If you have the parts, make them visible.
VisualStateManager.GoToState(MyTitleBar, "SubtitleTextVisible", false);
VisualStateManager.GoToState(MyTitleBar, "HeaderVisible", false);
VisualStateManager.GoToState(MyTitleBar, "ContentVisible", false);
VisualStateManager.GoToState(MyTitleBar, "FooterVisible", false);
// Run layout so we re-calculate the drag regions.
MyTitleBar.InvalidateMeasure();
}
Эта проблема будет устранена в следующем выпуске версии 1.6.
Другие важные изменения
- Неуправляемый
ItemsWrapGrid
. Это должно быть изменение, совместимое с обратной совместимостью. PipsPager
поддерживает новый режим, в котором он может выполнять оболочку между первыми и элементами списка.RatingControl
теперь является более настраиваемым, переместив некоторые жестко закодированные свойства стиля в ресурсы темы. Это позволяет приложениям переопределить эти значения, чтобы лучше настроить внешний вид RatingControl.
Новые API для 1.6-экспериментальных
1.6-экспериментальный1 включает следующие новые API. Эти API не экспериментальны, но еще не включены в стабильную версию winAppSDK.
Microsoft.UI.Xaml.Controls
PipsPager
WrapMode
WrapModeProperty
PipsPagerWrapMode
None
Wrap
Дополнительные api 1.6-экспериментальные1
Этот выпуск включает следующие новые и измененные экспериментальные API:
Microsoft.UI.Content
ChildContentLink
ContentExternalOutputLink
IsAboveContent
ContentIsland
Children
Create
FindAllForCompositor
GetByVisual
Offset
RotationAngleInDegrees
ContentSite
Offset
RotationAngleInDegrees
ContentSiteView
Offset
RotationAngleInDegrees
IContentLink
IContentSiteBridge2
ReadOnlyDesktopSiteBridge
Microsoft.UI.Input
EnteredMoveSizeEventArgs
EnteringMoveSizeEventArgs
ExitedMoveSizeEventArgs
InputNonClientPointerSource
EnteredMoveSize
EnteringMoveSize
ExitedMoveSize
WindowRectChanged
WindowRectChanging
MoveSizeOperation
WindowRectChangedEventArgs
WindowRectChangingEventArgs
Microsoft.UI.Windowing
AppWindow
DefaultTitleBarShouldMatchAppModeTheme
Microsoft.UI.Xaml
XamlRoot
CoordinateConverter
TryGetContentIsland
Microsoft.UI.Xaml.Controls
ScrollingViewChangingEventArgs
ScrollView
ViewChanging
StackLayout
IsVirtualizationEnabled
IsVirtualizationEnabledProperty
TabView
CanTearOutTabs
CanTearOutTabsProperty
ExternalTornOutTabsDropped
ExternalTornOutTabsDropping
TabTearOutRequested
TabTearOutWindowRequested
TabViewExternalTornOutTabsDroppedEventArgs
TabViewExternalTornOutTabsDroppingEventArgs
TabViewTabTearOutRequestedEventArgs
TabViewTabTearOutWindowRequestedEventArgs
TitleBar
TitleBarAutomationPeer
TitleBarTemplateSettings
Microsoft.UI.Xaml.Controls.Primitives
ScrollPresenter
ViewChanging
Другие известные проблемы
- Приложения, использующие
Microsoft.UI.Content.ContentIslands
и не обрабатывающие событие ContentIsland.AutomationProviderRequested (или возвращающие nullptr в качестве поставщика автоматизации), завершатся сбоем, если включена любая функция специальных возможностей или средство автоматизации пользовательского интерфейса, например голосовой доступ, экранный диктор, аналитика специальных возможностей, Inspect.exe и т. д.
Исправления ошибок
В этом выпуске содержатся следующие исправления ошибок:
- Исправлена проблема, из-за которой щелкнуть пустую область
ScrollViewer
фокуса всегда перемещается к первому фокусируемому элементу управления вScrollViewer
элементе управления и прокрутите его в режиме просмотра. Дополнительные сведения см. в статье о проблеме GitHub #597. - Исправлена проблема, из-за которой
Window.Activated
событие иногда запускалось несколько раз. Дополнительные сведения см. в статье о проблеме GitHub #7343. - Исправлена проблема, задающая
NavigationViewItem.IsSelected
свойство, чтобыtrue
предотвратить отображение дочерних элементов при развертывании. Дополнительные сведения см. в статье о проблеме GitHub #7930. - Исправлена проблема, из-за которой
MediaPlayerElement
неправильно отображались заголовки сNone
эффектами края илиDropShadow
эффектами края. Дополнительные сведения см. в статье о проблеме GitHub #7981. - Исправлена проблема, из-за которой
Flyout.ShowMode
свойство не использовалось при отображении всплывающего элемента. Дополнительные сведения см. в статье о проблеме GitHub #7987. - Исправлена проблема, из-за которой
NumberBox
иногда возникают ошибки округления. Дополнительные сведения см. в статье о проблеме GitHub #8780. - Исправлена проблема, из-за которой использование библиотеки, скомпилированной в более старой версии WinAppSDK, может попасть в попытку найти тип или свойство. Дополнительные сведения см. в статье о проблеме GitHub #8810.
- Исправлена проблема, из-за которой начальная фокусировка клавиатуры не задана при запуске окна. Дополнительные сведения см. в статье о проблеме GitHub #8816.
- Исправлена проблема, из-за которой
FlyoutShowMode.TransientWithDismissOnPointerMoveAway
она не работала после первого отображения. Дополнительные сведения см. в статье о проблеме GitHub #8896. - Исправлена проблема, из-за которой некоторые элементы управления не правильно привязывался
Foreground
к шаблону иBackground
свойствам. Дополнительные сведения см. в статье о проблеме GitHub #7070, #9020, #9029, #9083 и #9102. - Исправлена проблема, из-за которой
ThemeResource
в наборах не обновлялосьVisualStateManager
изменение темы. Часто затронутые элементы управления во всплывающих элементах управления. Дополнительные сведения см. в статье о проблеме GitHub #9198. - Исправлена проблема, из-за
WebView
которой основной фокус теряется, что приводит к дополнительным событиям размытия или фокуса и другим проблемам. Дополнительные сведения см. в статье о проблеме GitHub #9288. - Исправлена проблема, из-за которой
NavigationView
в выходных данных отладки может отображаться ошибка привязки. Дополнительные сведения см. в статье о проблеме GitHub #9384. - Исправлена проблема, из-за которой файлы SVG, определяющие отрицательное поле просмотра, больше не отображались. Дополнительные сведения см. в статье о проблеме GitHub #9415.
- Исправлена проблема, из-за которой изменение
ItemsView.Layout
ориентации привело к удалению элемента. Дополнительные сведения см. в статье о проблеме GitHub #9422. - Исправлена проблема, из-за которой прокрутка созданного
ScrollView
большого количества выходных данных отладки. Дополнительные сведения см. в статье о проблеме GitHub #9434. - Исправлена проблема, из-за которой
MapContorl.InteractiveControlsVisible
не работает должным образом. Дополнительные сведения см. в статье о проблеме GitHub #9486. - Исправлена проблема, из-за которой
MapControl.MapElementClick
событие не срабатывает должным образом. Дополнительные сведения см. в статье о проблеме GitHub #9487. - Исправлена проблема, из-за которой x:Bind не проверяет значение NULL перед использованием слабой ссылки, что может привести к сбою. Дополнительные сведения см. в статье о проблеме GitHub #9551.
- Исправлена проблема, из-за которой изменение
TeachingTip.Target
свойства неправильно обновлялось. Дополнительные сведения см. в статье о проблеме GitHub #9553. - Исправлена проблема, из-за которой раскрывающийся список не ответил в WebView2. Дополнительные сведения см. в статье о проблеме GitHub #9566.
- Исправлена утечка памяти при использовании
GeometryGroup
. Дополнительные сведения см. в статье о проблеме GitHub #9578. - Исправлена проблема, из-за которой прокрутка очень большого количества элементов из элемента в объекте
ItemRepeater
ScrollView
может вызвать пустые кадры отрисовки. Дополнительные сведения см. в статье о проблеме GitHub #9643. - Исправлена проблема, из-за которой
SceneVisual
не работало.
См. также
Windows developer
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по