BLOG

記事一覧 タグ一覧

.NET 9 での WPF新機能

投稿日:

この記事はOUCC Advent Calendar 2024の20日目の記事です。

祝 .NET 9

2024/11/13に .NET 9 がリリースされてから久しいですが、皆さんは使っているでしょうか?
個人的にはC#的には細かい改善が入った感じがしていてとても良いと思っています。(まだプレビューですがfieldキーワードとか楽しいです)

さて、最近アップデートが小さかったWPFですが、今回はかなり大きな変更が来ています。
早速見ていきましょう!

Fluent テーマ対応

なんとついにWindows 11のテーマに対応しました!
個人的にはもう永遠にWindows 7のままかと思ってたのでびっくりです。

導入方法はとても簡単で、App.xamlを編集するだけです!

<Application x:Class="ScreenCover.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:ScreenCover"
             StartupUri="MainWindow.xaml"
             ThemeMode="System"> <!-- ←これ -->
    <Application.Resources>
<!-- ここから -->
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
<!-- ここまで -->
</Application>

ダークテーマやライトテーマしか使わないといった場合は以下のようにSourceを変えるだけです

<!-- ライトテーマ -->
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.Light.xaml" />
<!-- ダークテーマ -->
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.Dark.xaml" />

Material Design Toolkitと似たような感じになってますね。残念ながらまだまだデフォルトテーマというわけにはいかなさそうです。

ライト・ダークテーマ対応

Fluent テーマ対応に合わせてライト・ダークテーマの対応も入っています。
この機能を使うにはFluentテーマを使ったうえで、App.xamlAppication要素のThemeMode属性を編集すればよいです。指定する値はこんな感じになってます。

  • ThemeMode属性
    • Light:ライトモード
    • Dark:ダークモード
    • System:ユーザーが設定しているモード また、ResourceDictionary要素で片方のテーマのリソースを入れてない場合は、ThemeModeに関係なくそのリソースのテーマが優先されるようです。

アクセントカラー対応

Windowsにはライト・ダークテーマとは別にアクセントカラーを設定を設定できるのはご存じのとおりだとおもうのですが、ついにStaticResourceで用意されました。

カラーカラーリソースキーブラシブラシリソースキー
標準AccentColorAccentColorKeyAccentColorBrushAccentColorBrushKey
ライト1AccentColorLight1AccentColorLight1KeyAccentColorLight1BrushAccentColorLight1BrushKey
ライト2AccentColorLight2AccentColorLight2KeyAccentColorLight2BrushAccentColorLight2BrushKey
ライト3AccentColorLight3AccentColorLight3KeyAccentColorLight3BrushAccentColorLight3BrushKey
濃色1AccentColorDark1AccentColorDark1KeyAccentColorDark1BrushAccentColorDark1BrushKey
濃色2AccentColorDark2AccentColorDark2KeyAccentColorDark2BrushAccentColorDark2BrushKey
濃色3AccentColorDark3AccentColorDark3KeyAccentColorDark3BrushAccentColorDark3BrushKey

初めに紹介したようにFluentテーマを導入した場合は{StaticResource AccentColorBrush}みたいな感じで簡単に使えるようになります。

まだ、この機能はFluentテーマを導入していなくても使えるらしく、その場合は{DynamicResource {x:Static SystemColors.AccentColorLight3BrushKey}}いった感じでSystemColors.xxxのようにすれば使えるみたいです。

ハイフンベースの合字(リガチャ)のサポート

ちょっとインパクトが落ちますが、どうやら->みたいなやつを→みたいに合字で表示できなかったのができるになったみたいです。 当然ですが、合字に対応しているフォントでないと見れないのでそんなに関係なさそうです。

まとめ

ダークモード対応などおおきめなアプデがやってきました。(さりげなくWinFormsでもダークモード導入がすすんでいるらしい)
最近はWinUI 3が追い上げてきていますが、まだまだこちらも現役ですね。

それではよいWPFライフを!

参考資料

WPF for .NET 9 の新機能 - WPF .NET
Windows Presentation Foundation (WPF) for .NET 9 の新機能について説明します。 WPF の新しいバージョンは、年に 1 回 .NET でリリースされます。
WPF for .NET 9 の新機能 - WPF .NET favicon https://learn.microsoft.com/ja-jp/dotnet/desktop/wpf/whats-new/net90?view=netdesktop-9.0
WPF for .NET 9 の新機能 - WPF .NET
wpf/Documentation/docs/using-fluent.md at add-fluent-usage-documentation · dotnet/wpf
WPF is a .NET Core UI framework for building Windows desktop applications. - dotnet/wpf
wpf/Documentation/docs/using-fluent.md at add-fluent-usage-documentation · dotnet/wpf favicon https://github.com/dotnet/wpf/blob/add-fluent-usage-documentation/Documentation/docs/using-fluent.md
wpf/Documentation/docs/using-fluent.md at add-fluent-usage-documentation · dotnet/wpf