Co je nového ve WPF pro .NET 9
Tento článek popisuje, co je nového ve Windows Presentation Foundation (WPF) pro .NET 9. Hlavním cílem pro WPF tento rok bylo zlepšení vizuálních schopností WPF a poskytování nového motivu založeného na principech návrhu Fluent pro Windows 11.
Nový motiv si můžete prohlédnout stažením aplikace Galerie WPF z Microsoft Storu.
Fluent motiv
Součástí WPF je nový motiv, který přináší novou moderní estetickou architekturu Windows 11 pro aplikace WPF. Zahrnuje integrované světlé a tmavé režimy a podporu barev zvýraznění systému.
Použití motivu
Motiv Fluent můžete použít dvěma způsoby, nastavit ThemeMode
vlastnost nebo odkazovat na slovník prostředků motivu Fluent. Další informace o nastavení režimu motivu naleznete v tématu MotivMode.
Slovník prostředků motivu Fluent je k dispozici na následujícím identifikátoru URI balíčku: /PresentationFramework.Fluent;component/Themes/Fluent.xaml
. Pokud chcete prostředek použít na úrovni aplikace, načtěte ho do prostředků aplikace:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Slovník prostředků se dá použít také u Window
motivu samotného okna.
MotivMode
Do WPF jsme přidali nové rozhraní API pro styly, které je přístupné prostřednictvím ThemeMode
vlastnosti. Pomocí této vlastnosti můžete použít styl Fluent, aniž byste museli odkazovat přímo na styling slovníku prostředků.
Dostupné hodnoty jsou:
-
Light
— Použije světlý motiv Fluentu. -
Dark
– Použije tmavý motiv Fluent. -
System
– Použije světlý nebo tmavý motiv Fluent na základě aktuálního nastavení Windows uživatele. -
None
– (výchozí) Používá motiv Aero2.
Chcete-li použít režim motivu pro celou aplikaci, nastavte ThemeMode
vlastnost u Application
typu. Pokud ho chcete použít v jednom okně, nastavte ThemeMode
ho na Window
typ.
Například styl celé aplikace na základě aktuálního světlého nebo tmavého motivu nastaveného systémem Windows:
<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">
Tady je příklad vynucení světlého motivu bez ohledu na motiv nastavený systémem Windows:
<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">
ThemeMode
Pokud je nastavená na jinou hodnotu než None
na úrovni aplikace, None
už se nedá použít na úrovni okna.
ThemeMode
je navržen tak, aby respektoval nastavení nastavené fluentovým slovníkem, což vám umožní přizpůsobit motiv Fluent.
Nastavit v kódu
Podpora změny nastavení ThemeMode
v kódu je aktuálně experimentální funkcí.
ThemeMode
Přístup k vlastnosti v kódu generuje chybu WPF0001, což brání přístupu k rozhraní API. Potlačí chybu pro přístup k rozhraní API.
Upozorňující
Toto rozhraní API je experimentální a může se změnit.
Nejprve do souboru projektu přidejte následující PropertyGroup
prvek, který potlačí chybu:
<PropertyGroup>
<NoWarn>$(NoWarn);WPF0001</NoWarn>
</PropertyGroup>
Tip
Direktivu #pragma warning disable WPF0001
můžete použít k potlačení chyby, ke které dochází místo zakázání pro celý projekt.
Dále nastavte ThemeMode
vlastnost na úrovni aplikace nebo na úrovni okna:
// Set light mode at the application-level
Application.Current.ThemeMode = ThemeMode.Light;
// Set dark mode on the current window
this.ThemeMode = ThemeMode.Dark;
Podpora barvy zvýraznění windows
Windows 10 zavedl uživatelsky vybratelnou barvu zvýraznění, která se používá při poskytování osobního dotykového ovládání nebo volání určitého vizuálního prvku. WPF teď podporuje barvu zvýraznění vybranou uživatelem.
Barva vizuálu je k dispozici jako System.Windows.Media.Color
, System.Windows.Media.SolidColorBrush
nebo System.Windows.ResourceKey
. Spolu se samotnou barvou jsou k dispozici světlé a tmavé odstíny barvy zvýraznění. K těmto přístupům se přistupuje prostřednictvím System.Windows.SystemColors
:
Color | Color Resource Key | Kartáč | Klíč prostředku štětce | |
---|---|---|---|---|
Přízvuk | AccentColor |
AccentColorKey |
AccentColorBrush |
AccentColorBrushKey |
Světlá 1 | AccentColorLight1 |
AccentColorLight1Key |
AccentColorLight1Brush |
AccentColorLight1BrushKey |
Světlá 2 | AccentColorLight2 |
AccentColorLight2Key |
AccentColorLight2Brush |
AccentColorLight2BrushKey |
Světlá 3 | AccentColorLight3 |
AccentColorLight3Key |
AccentColorLight3Brush |
AccentColorLight3BrushKey |
Tmavá 1 | AccentColorDark1 |
AccentColorDark1Key |
AccentColorDark1Brush |
AccentColorDark1BrushKey |
Tmavá 2 | AccentColorDark2 |
AccentColorDark2Key |
AccentColorDark2Brush |
AccentColorDark2BrushKey |
Tmavá 3 | AccentColorDark3 |
AccentColorDark3Key |
AccentColorDark3Brush |
AccentColorDark3BrushKey |
Důležité
Barvy zvýraznění jsou k dispozici s motivem Fluent nebo bez.
Při vytváření uživatelského rozhraní, které používá barvu zvýraznění, zabalte klíč prostředku do dynamického prostředku. Když uživatel změní barvu zvýraznění při otevření aplikace, barva se automaticky aktualizuje v aplikaci. Tady je TextBlock
například barva popředí nastavená na vybranou barvu zvýraznění uživatele:
<TextBlock Text="First Name:"
Foreground="{DynamicResource {x:Static SystemColors.AccentColorBrushKey}}" />
Podpora ligatur založených na spojovníku
WPF nikdy nepodporuje ligatury založené na spojovníku v ovládacích prvcích uživatelského rozhraní, jako TextBlock
je například . Tato dlouhodobá žádost komunity byla přidána do .NET 9.
Tady je obrázek ligatur, které se neaplikují na glyfy v .NET 8:
A teď stejný text jako vykreslený v .NET 9:
BinaryFormatter se už nepodporuje
BinaryFormatter
je považována za nebezpečná, protože je zranitelná vůči útokům deserializace, což může vést k odepření služby (DoS), zpřístupnění informací nebo vzdálenému spuštění kódu. Byla implementována dříve, než byla ohrožení zabezpečení deserializace dobře pochopena, a její návrh neodpovídá moderním osvědčeným postupům zabezpečení.
Počínaje rozhraním .NET 9 byla jeho implementace odstraněna, aby se zabránilo těmto rizikům zabezpečení. Při BinaryFormatter
použití je vyvolán PlatformNotSupportedException
výjimka.
WPF se používá BinaryFormatter
v mnoha scénářích, například při serializaci dat pro schránku a operace přetažení myší. WpF interně používá bezpečnější podmnožinu BinaryFormatter
pro zpracování konkrétních případů použití se známou sadou typů.
Další informace o BinaryFormatter
nástroji BinaryFormatter naleznete v tématu Průvodce migrací WPF.
.NET Desktop feedback