Поделиться через


Последние заметки о выпуске экспериментального канала для пакета SDK для приложений Windows

Внимание

Экспериментальный канал не поддерживается для использования в рабочих средах, а приложения, использующие экспериментальные выпуски, не могут быть опубликованы в Microsoft Store.

Экспериментальный канал включает выпуски пакета SDK для приложений Windows с функциями экспериментального канала на ранних этапах разработки. API для экспериментальных функций имеют экспериментальный атрибут. При вызове экспериментального API в коде вы получите предупреждение во время сборки. Все API-интерфейсы в экспериментальном канале подвергаются обширным исправлениям и критическим изменениям. Экспериментальные функции и API могут быть удалены из последующих выпусков в любое время.

Важные ссылки:

Архив заметки о выпуске экспериментального канала:

Экспериментальная версия 1.6 (1.6.0-experimental1)

Это последний выпуск экспериментального канала.

Чтобы скачать, перенаправьте версию 1.6.240531000-experimental1NuGet 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.
  • Исправлена проблема, из-за которой прокрутка очень большого количества элементов из элемента в объекте ItemRepeaterScrollView может вызвать пустые кадры отрисовки. Дополнительные сведения см. в статье о проблеме GitHub #9643.
  • Исправлена проблема, из-за которой SceneVisual не работало.