Freigeben über


Neueste Versionshinweise zum experimentelle Kanal für das Windows App SDK

Wichtig

Der experimentelle Kanal wird nicht für die Verwendung in Produktionsumgebungen unterstützt, und Apps, die die experimentellen Versionen verwenden, können nicht im Microsoft Store veröffentlicht werden.

Der experimentelle Kanal umfasst Versionen des Windows App SDK mit experimentellen Kanalfeatures, die sich in frühen Entwicklungsphasen befinden. APIs für experimentelle Features weisen das Experimental-Attribut auf. Wenn Sie eine experimentelle API in Ihrem Code aufrufen, erhalten Sie eine Buildzeitwarnung. Alle APIs im experimentellen Kanal unterliegen umfangreichen Überarbeitungen und wichtigen Änderungen. Experimentelle Features und APIs können jederzeit aus nachfolgenden Versionen entfernt werden.

Wichtige Links:

Archiv der Versionshinweise zum Experimental-Kanal

Version 1.6 Experimental (1.6.0-experimental1)

Dies ist die neueste Version des experimentellen Kanals.

Um sie herunterzuladen, richten Sie Ihre WinAppSDK NuGet-Version neu aus, auf 1.6.240531000-experimental1.

Erforderliche C#-Projektänderungen für 1.6-experimental1

In 1.6-experimental1 erfordern verwaltete Windows App SDK-Apps Microsoft.Windows.SDK.NET.Ref*.*.*.35-preview (oder höher), die über WindowsSdkPackageVersion in Ihrer csproj Datei angegeben werden können. Zum Beispiel:

<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>
   ...

Darüber hinaus sollten verwaltete Windows App SDK-Apps mit C#/WinRT auf Microsoft.Windows.CsWinRT2.1.0-prerelease.240602.1 (oder höher) aktualisiert werden.

Unterstützung von nativem AOT

Die .NET-Projekteigenschaft PublishAOT wird jetzt für die systemeigene Ahead-Of-Time-Kompilierung unterstützt. Ausführliche Informationen finden Sie unter native AOT-Bereitstellung. Da AOT auf der Trimming-Unterstützung basiert, gilt auch ein Großteil der folgenden Kürzungsanleitungen für AOT.

Zur PublishAOT Unterstützung benötigen Sie zusätzlich zu den im vorherigen Abschnitt beschriebenen Änderungen des C#-Projekts auch einen Paketverweis auf Microsoft.Windows.CsWinRT2.1.0-prerelease.240602.1 (oder höher), um den Quellgenerator aus diesem Paket zu aktivieren.

Um die PublishAOT MSBuild-Ziele zu aktivieren, muss der NuGet-Wiederherstellungsvorgang die PublishAOT Eigenschaft explizit auf "true" festlegen. Zum Beispiel:

dotnet restore -p:publishAot=true ...

oder

msbuild /t:restore /p:publishAot=true ...

Sie können dies auch zu Ihrer csproj Datei hinzufügen:

<PublishAot Condition="'$(ExcludeRestorePackageImports)'=='true'">true</PublishAot>

Beheben von AOT-Problemen

In dieser Version ist der Entwickler dafür verantwortlich, sicherzustellen, dass alle Typen ordnungsgemäß gewurzelt sind, um Kürzungen (z. B. mit spiegelbasierten {Binding} Zielen) zu vermeiden. Spätere Versionen werden sowohl C#/WinRT als auch der XAML-Compiler verbessern, um die Stammerstellung nach Möglichkeit zu automatisieren, Entwickler auf das Kürzen von Risiken hinzuweisen und Mechanismen zur Behebung bereitzustellen.

Teilklassen

C#/WinRT enthält PublishAOT auch Unterstützung in Version 2.1.0-prerelease.240602.1. Um eine Klasse für die AOT-Veröffentlichung mit C#/WinRT zu aktivieren, muss sie zuerst markiert partialwerden. Dadurch kann der C#/WinRT AOT-Quellanalysator die Klassen für statische Analysen attributieren. Nur Klassen (die Methoden enthalten, die Ziele des Kürzens) erfordern dieses Attribut.

Spiegelungsfreie Techniken

Um die AOT-Kompatibilität zu ermöglichen, sollten spiegelbasierte Techniken durch statisch typierte Serialisierung, AppContext.BaseDirectory, typeof() usw. ersetzt werden. Ausführliche Informationen finden Sie in der Einführung zum Kürzen von Warnungen.

Stammtypen

Bis zur vollständigen Unterstützung für {Binding} die Implementierung können Typen wie folgt vor dem Kürzen beibehalten werden: Bei einem Projekt P , das assembly A mit Typ T im Namespace Nverwendet wird, auf den nur dynamisch verwiesen wird (also normalerweise gekürzt), T kann folgendes beibehalten werden:

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>

Vollständige XML-Ausdruckssyntax des Stammdeskriptors finden Sie unter "Stammdeskriptoren".

Hinweis

Abhängigkeitspakete, die noch keine AOT-Unterstützung übernommen haben, können Laufzeitprobleme aufweisen.

Verbesserte TabView-Registerkarte ausreißen

TabView unterstützt einen neuen CanTearOutTabs Modus, der eine erweiterte Benutzeroberfläche zum Ziehen von Registerkarten und Zum Ausziehen in ein neues Fenster bietet. Wenn diese neue Option aktiviert ist, ähnelt das Ziehen von Tabstopps in Edge und Chrome sehr ähnlich der Registerkartenziehfunktion, bei der während des Ziehens sofort ein neues Fenster erstellt wird, sodass der Benutzer es an den Rand des Bildschirms ziehen kann, um das Fenster in einer reibungslosen Bewegung zu maximieren oder anzudockt. Diese Implementierung verwendet auch keine Drag-and-Drop-APIs, sodass sie nicht durch Einschränkungen in diesen APIs beeinträchtigt wird. Insbesondere wird das Ausreißen von Registerkarten in Prozessen unterstützt, die als Administrator ausgeführt werden.

Bekanntes Problem: In dieser Version ist das Zeigereingabeverhalten auf CanTearOutTabs Monitoren mit einem Skalierungsfaktor von 100 % falsch. Dies wird in der nächsten Version von 1.6 behoben.

Neues Titelleisten-Steuerelement

Ein neues TitleBar Steuerelement erleichtert das Erstellen einer großartigen, anpassbaren Titelleiste für Ihre App mit den folgenden Features:

  • Konfigurierbare Symbol-, Titel- und Untertiteleigenschaften
  • Integrierte Schaltfläche "Zurück"
  • Die Möglichkeit, ein benutzerdefiniertes Steuerelement wie ein Suchfeld hinzuzufügen
  • Automatisches Ausblenden und Anzeigen von Elementen basierend auf der Fensterbreite
  • Angebote zum Anzeigen des aktiven oder deaktiven Fensterzustands
  • Unterstützung für standardmäßige Titelleistenfeatures wie ziehende Bereiche in leeren Bereichen, Reaktionsfähigkeit des Designs, Standardbeschriftungsschaltflächen (min/max/close) und integrierte Unterstützung für Barrierefreiheit

Das TitleBar Steuerelement wurde entwickelt, um verschiedene Kombinationen von Titelleisten zu unterstützen, sodass es flexibel ist, die gewünschte Oberfläche zu erstellen, ohne viele benutzerdefinierten Code schreiben zu müssen. Wir haben Feedback vom Prototyp der Titelleiste des Community-Toolkits erhalten und freuen uns auf weiteres Feedback!

Bekanntes Problem: In dieser Version wird das TitleBar Symbol und der Titel nur aufgrund eines Problems angezeigt, bei dem einige Elemente beim Laden nicht angezeigt werden. Um dies zu umgehen, verwenden Sie den folgenden Code, um die anderen Elemente zu laden (Untertitel, Kopfzeile, Inhalt und Fußzeile):

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();
  }

Dieses Problem wird in der nächsten Version 1.6 behoben.

Weitere wichtige Änderungen

  • Unversiegelt ItemsWrapGrid. Dies sollte eine abwärtskompatible Änderung sein.
  • PipsPager unterstützt einen neuen Modus, in dem er zwischen den ersten und Listenelementen umbrochen werden kann.
  • RatingControl ist jetzt besser anpassbar, indem einige hartcodierte Formateigenschaften in Designressourcen verschoben werden. Dadurch können Apps diese Werte überschreiben, um die Darstellung von RatingControl besser anzupassen.

Neue APIs für 1.6-experimental1

1.6-experimental1 enthält die folgenden neuen APIs. Diese APIs sind nicht experimentell, aber noch nicht in einer stabilen Version von WinAppSDK enthalten.

Microsoft.UI.Xaml.Controls

    PipsPager
        WrapMode
        WrapModeProperty

    PipsPagerWrapMode
        None
        Wrap

Zusätzliche 1.6-experimental1-APIs

Diese Version enthält die folgenden neuen und geänderten experimentellen APIs:

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

Andere bekannte Probleme

  • Nicht-XAML-Anwendungen, die das ContentIsland.AutomationProviderRequested-Ereignis verwenden Microsoft.UI.Content.ContentIslands und nicht behandeln (oder nullptr als Automatisierungsanbieter zurückgeben), stürzt ab, wenn ein Barrierefreiheits- oder Benutzeroberflächenautomatisierungstool wie Voice Access, Sprachausgabe, Accessibility Insights, Inspect.exe usw. aktiviert ist.

Fehlerkorrekturen

Die folgenden Fehlerkorrekturen sind in diesem Release enthalten:

  • Es wurde ein Problem behoben, bei dem durch Klicken in einen leeren Bereich eines Steuerelements ScrollViewer immer der Fokus auf das erste fokussierbare Steuerelement im Steuerelement verschoben und in die ScrollViewer Ansicht gescrollt wurde. Weitere Informationen finden Sie unter GitHub-Problem Nr. 597.
  • Es wurde ein Problem behoben, bei dem das Window.Activated Ereignis manchmal mehrmals ausgelöst wurde. Weitere Informationen finden Sie unter GitHub-Problem #7343.
  • Ein Problem wurde behoben, durch das die NavigationViewItem.IsSelected Eigenschaft so festgelegt wurde, true dass die untergeordneten Elemente nicht angezeigt werden, wenn sie erweitert werden. Weitere Informationen finden Sie unter GitHub-Problem #7930.
  • Es wurde ein Problem behoben, bei dem MediaPlayerElement Beschriftungen mit None oder DropShadow Randeffekten nicht ordnungsgemäß angezeigt wurden. Weitere Informationen finden Sie unter GitHub-Problem #7981.
  • Es wurde ein Problem behoben, bei dem die Flyout.ShowMode Eigenschaft beim Anzeigen des Flyouts nicht verwendet wurde. Weitere Informationen finden Sie unter GitHub-Problem #7987.
  • Es wurde ein Problem behoben, bei dem NumberBox manchmal Rundungsfehler aufgetreten waren. Weitere Informationen finden Sie unter GitHub-Problem #8780.
  • Es wurde ein Problem behoben, bei dem die Verwendung einer Bibliothek, die mit einer älteren Version von WinAppSDK kompiliert wurde, auf einen Typ oder eine Eigenschaft stoßen kann. Weitere Informationen finden Sie unter GitHub-Problem #8810.
  • Es wurde ein Problem behoben, bei dem der anfängliche Tastaturfokus beim Starten eines Fensters nicht festgelegt wurde. Weitere Informationen finden Sie unter GitHub-Problem #8816.
  • Es wurde ein Problem behoben, bei dem FlyoutShowMode.TransientWithDismissOnPointerMoveAway nach der ersten Anzeige nicht mehr funktionierte. Weitere Informationen finden Sie unter GitHub-Problem #8896.
  • Es wurde ein Problem behoben, bei dem einige Steuerelemente nicht ordnungsgemäß vorlagenbindung Foreground und Background -eigenschaften enthielten. Weitere Informationen finden Sie unter GitHub-Problem #7070, #9020, #9029, #9083 und #9102.
  • Es wurde ein Problem behoben, bei dem ThemeResourcein Settern verwendet VisualStateManager wurde, bei der Designänderung nicht aktualisiert wurde. Dies hat häufig Auswirkungen auf Steuerelemente in Flyouts. Weitere Informationen finden Sie unter GitHub-Problem #9198.
  • Es wurde ein Problem behoben, bei dem WebView der Schlüsselfokus verloren ging, was zu zusätzlichen Weichzeichner-/Fokusereignissen und anderen Problemen führte. Weitere Informationen finden Sie unter GitHub-Problem #9288.
  • Ein Problem wurde behoben, bei dem NavigationView ein Bindungsfehler in der Debugausgabe angezeigt werden kann. Weitere Informationen finden Sie unter GitHub-Problem #9384.
  • Ein Problem wurde behoben, bei dem SVG-Dateien, die ein negatives Viewbox-Element definieren, nicht mehr gerendert wurden. Weitere Informationen finden Sie unter GitHub-Problem #9415.
  • Es wurde ein Problem behoben, bei dem das Ändern ItemsView.Layout der Ausrichtung dazu führte, dass ein Element entfernt wurde. Weitere Informationen finden Sie unter GitHub-Problem #9422.
  • Es wurde ein Problem behoben, bei dem beim Scrollen eine ScrollView Menge Debugausgabe generiert wurde. Weitere Informationen finden Sie unter GitHub-Problem #9434.
  • Es wurde ein Problem behoben, bei dem MapContorl.InteractiveControlsVisible nicht ordnungsgemäß funktioniert. Weitere Informationen finden Sie unter GitHub-Problem #9486.
  • Es wurde ein Problem behoben, bei dem MapControl.MapElementClick das Ereignis nicht ordnungsgemäß ausgelöst wurde. Weitere Informationen finden Sie unter GitHub-Problem #9487.
  • Es wurde ein Problem behoben, bei dem x:Bind vor der Verwendung eines schwachen Verweises nicht auf NULL überprüft, was zu einem Absturz führen kann. Weitere Informationen finden Sie unter GitHub-Problem #9551.
  • Es wurde ein Problem behoben, bei dem das Ändern der Eigenschaft ihre TeachingTip.Target Position nicht ordnungsgemäß aktualisiert. Weitere Informationen finden Sie unter GitHub-Problem #9553.
  • Ein Problem wurde behoben, bei dem Dropdowns in WebView2 nicht geantwortet haben. Weitere Informationen finden Sie unter GitHub-Problem #9566.
  • Ein Speicherverlust bei Verwendung wurde GeometryGroupbehoben. Weitere Informationen finden Sie unter GitHub-Problem #9578.
  • Es wurde ein Problem behoben, bei dem das Scrollen durch eine sehr große Anzahl von Elementen aus einem ItemRepeater in einer ScrollView Datei zu leeren Renderframes führen kann. Weitere Informationen finden Sie unter GitHub-Problem #9643.
  • Es wurde ein Problem behoben, bei dem SceneVisual es nicht funktionierte.