Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, was in Windows Presentation Foundation (WPF) für .NET 9 neu ist. Der Schwerpunkt von WPF in diesem Jahr war die Verbesserung der visuellen Funktionen von WPF und die Bereitstellung eines neuen Designs basierend auf den Fluent-Designprinzipien für Windows 11.
Sie können eine Vorschau des neuen Designs anzeigen, indem Sie die WPF-Katalog-App aus dem Microsoft Store herunterladen.
Fluent-Thema
Ein neues Design ist in WPF enthalten, das eine frische, moderne Windows 11-Ästhetik für WPF-Apps bietet. Es enthält integrierte helle und dunkle Themen sowie Unterstützung der Systemakzentfarbe.
Anwenden des Designs
Sie können das Fluent-Design auf zwei Arten anwenden, indem Sie die ThemeMode
Eigenschaft festlegen oder auf das Fluent-Designressourcenwörterbuch verweisen. Weitere Informationen zur Einstellung des Designmodus finden Sie unter ThemeMode.
Das Fluent-Designressourcenverzeichnis ist im folgenden Paket-URI verfügbar: /PresentationFramework.Fluent;component/Themes/Fluent.xaml
. Um die Ressource auf Anwendungsebene anzuwenden, laden Sie die Ressource in die Ressourcen Ihrer App:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Das Ressourcenverzeichnis kann auch auf ein Window
angewendet werden, um nur das Fenster selbst zu thematisieren.
Themenmodus
WPF wurde eine neue Formatierungs-API hinzugefügt, die über die ThemeMode
Eigenschaft verfügbar gemacht wird. Mithilfe dieser Eigenschaft können Sie die Fluent-Formatvorlage anwenden, ohne direkt auf ein Formatressourcenwörterbuch verweisen zu müssen.
Verfügbare Werte sind:
-
Light
– Wendet das helle Fluent-Design an. -
Dark
– Wendet das dunkle Fluent-Design an. -
System
– Wendet das helle oder dunkle Fluent-Design basierend auf der aktuellen Windows-Einstellung des Benutzers an. -
None
—(Standard) Verwendet das Aero2-Design.
Wenn Sie einen Designmodus für die gesamte Anwendung anwenden möchten, legen Sie die ThemeMode
Eigenschaft für den Application
Typ fest. Um es auf ein einzelnes Fenster anzuwenden, legen Sie ThemeMode
für den Typ Window
fest.
Formatieren Sie beispielsweise die gesamte Anwendung basierend auf dem aktuellen hellen oder dunklen Design, das von Windows festgelegt wurde:
<Application x:Class="MyWpfProject.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyWpfProject"
StartupUri="MainWindow.xaml"
ThemeMode="System">
Hier sehen Sie ein Beispiel für das Erzwingen des hellen Designs, unabhängig vom Design, das von Windows festgelegt wurde:
<Window x:Class="MyWpfProject.LightWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyWpfProject"
Title="LightWindow" Height="450" Width="800"
ThemeMode="Light">
Wenn der ThemeMode
Wert auf einen anderen Wert als None
auf Anwendungsebene festgelegt ist, None
kann er nicht mehr auf Fensterebene angewendet werden.
ThemeMode
ist so konzipiert, dass die von einem Fluent-Wörterbuch festgelegten Einstellungen berücksichtigt werden, sodass Sie das Fluent-Design anpassen können.
Im Code festlegen
Derzeit ist die Unterstützung für das Ändern der Einstellungen im ThemeMode
Code ein experimentelles Feature. Der Zugriff auf die ThemeMode
Eigenschaft im Code generiert Fehler WPF0001 und verhindert den Zugriff auf die API. Unterdrücken Sie den Fehler, um Zugriff auf die API zu erhalten.
Warnung
Diese API ist experimentell und kann geändert werden.
Fügen Sie zunächst das folgende PropertyGroup
Element zur Projektdatei hinzu, um den Fehler zu unterdrücken:
<PropertyGroup>
<NoWarn>$(NoWarn);WPF0001</NoWarn>
</PropertyGroup>
Tipp
Sie können die #pragma warning disable WPF0001
Direktive verwenden, um den Fehler zu unterdrücken, in dem er auftritt, anstatt ihn für das gesamte Projekt zu deaktivieren.
Legen Sie als Nächstes entweder die ThemeMode
Eigenschaft auf Anwendungsebene oder auf Fensterebene fest:
// Set light mode at the application-level
Application.Current.ThemeMode = ThemeMode.Light;
// Set dark mode on the current window
this.ThemeMode = ThemeMode.Dark;
Unterstützung für Windows-Akzentfarbe
Windows 10 hat eine vom Benutzer auswählbare Akzentfarbe eingeführt, die verwendet wird, um eine persönliche Toucheingabe bereitzustellen oder ein bestimmtes visuelles Element aufzurufen. WPF unterstützt jetzt die vom Benutzer ausgewählte Akzentfarbe.
Die Farbe ist als System.Windows.Media.Color
, System.Windows.Media.SolidColorBrush
oder System.Windows.ResourceKey
verfügbar. Zusammen mit der Farbe selbst sind helle und dunkle Schattierungen der Akzentfarbe verfügbar. Der Zugriff erfolgt über System.Windows.SystemColors
:
Farbe | Farbressourcenschlüssel | Bürste | Pinselressourcenschlüssel | |
---|---|---|---|---|
Akzent | AccentColor |
AccentColorKey |
AccentColorBrush |
AccentColorBrushKey |
Licht 1 | AccentColorLight1 |
AccentColorLight1Key |
AccentColorLight1Brush |
AccentColorLight1BrushKey |
Licht 2 | AccentColorLight2 |
AccentColorLight2Key |
AccentColorLight2Brush |
AccentColorLight2BrushKey |
Hell 3 | AccentColorLight3 |
AccentColorLight3Key |
AccentColorLight3Brush |
AccentColorLight3BrushKey |
Dunkel 1 | AccentColorDark1 |
AccentColorDark1Key |
AccentColorDark1Brush |
AccentColorDark1BrushKey |
Dunkel 2 | AccentColorDark2 |
AccentColorDark2Key |
AccentColorDark2Brush |
AccentColorDark2BrushKey |
Dunkel 3 | AccentColorDark3 |
AccentColorDark3Key |
AccentColorDark3Brush |
AccentColorDark3BrushKey |
Von Bedeutung
Akzentfarben sind mit oder ohne Fluent-Design verfügbar.
Wenn Sie eine Benutzeroberfläche erstellen, die die Akzentfarbe verwendet, umschließen Sie den Ressourcenschlüssel in eine dynamische Ressource. Wenn ein Benutzer die Akzentfarbe ändert, während die App geöffnet wird, wird die Farbe automatisch in der App aktualisiert. Hier ist beispielsweise ein TextBlock
, dessen Vordergrundfarbe auf die vom Benutzer gewählte Akzentfarbe festgelegt ist.
<TextBlock Text="First Name:"
Foreground="{DynamicResource {x:Static SystemColors.AccentColorBrushKey}}" />
Unterstützung für bindestrichbasierte Ligaturen
WPF unterstützt nie Bindestrich-basierte Ligaturen in UI-Steuerelementen wie der TextBlock
. Diese langjährige Community-Anfrage wurde in .NET 9 hinzugefügt.
Hier ist ein Bild der Ligaturen, die nicht auf die Glyphen in .NET 8 angewendet werden:
Und jetzt, derselbe Text wie in .NET 9 gerendert:
BinaryFormatter wird nicht mehr unterstützt
BinaryFormatter
wird als unsicher angesehen, da sie anfällig für Deserialisierungsangriffe ist, was zu Denial of Service (DoS), zur Offenlegung von Informationen oder zur Remotecodeausführung führen kann. Es wurde implementiert, bevor Deserialisierungsrisiken gut verstanden wurden, und sein Entwurf folgt nicht den bewährten Methoden für moderne Sicherheit.
Ab .NET 9 wurde die Implementierung entfernt, um diese Sicherheitsrisiken zu verhindern. Wenn BinaryFormatter
verwendet wird, wird die PlatformNotSupportedException
Ausnahme ausgelöst.
WPF verwendete BinaryFormatter
in vielen Szenarien, z. B. beim Serialisieren von Daten für Zwischenablage- und Drag-and-Drop-Vorgänge. Intern verwendet WPF weiterhin eine sicherere Teilmenge, BinaryFormatter
um bestimmte Anwendungsfälle mit einem bekannten Satz von Typen zu behandeln.
Weitere Informationen BinaryFormatter
finden Sie im WPF-Migrationshandbuch für BinaryFormatter.
.NET Desktop feedback