Sdílet prostřednictvím


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.

  • Fluent motiv v světlém režimu:

    Snímek obrazovky s aplikací Galerie WPF, která demonstruje plynulý motiv v světlém režimu

  • Fluent motiv v tmavém režimu:

    Snímek obrazovky s aplikací Galerie WPF, která demonstruje fluentní motiv v tmavém režimu

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.SolidColorBrushnebo 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 TextBlockje 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:

Snímek obrazovky jednoduché aplikace WPF, která obsahuje blok textu, který ukazuje, jak se glyfy nekombinují do ligatur s .NET 8.

A teď stejný text jako vykreslený v .NET 9:

Snímek obrazovky jednoduché aplikace WPF s blokem textu, který ukazuje, jak se glyfy kombinují do ligatur s .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 BinaryFormatternástroji BinaryFormatter naleznete v tématu Průvodce migrací WPF.