🧊

テーマの実際の色等をコードで取得する

2023/04/30に公開

はじめに

WinUI 3 プログラミングの中で、テーマで指定されている色が実際何色なんだ、というのをコードで取得したい場合があります。

しかし、FrameworkElement.ActualTheme はテーマ名(Light / Dark)しか取得できません。

String themeName = ActualTheme.ToString();

やり方

リソースから取得します。

using Microsoft.UI.Xaml;
using Windows.UI;
SolidColorBrush? brush = Application.Current.Resources["ApplicationPageBackgroundThemeBrush"] as SolidColorBrush;
if (brush != null)
{
    Color color = brush.Color;
}

XAML

XAML で

<Page
    x:Class="TestWinUi3.Views.BlankPage1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
    </Grid>
    
</Page>

とした時と同様の色を取得できます。

キー名一覧

"ApplicationPageBackgroundThemeBrush" 等のキー名は

C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.22621.0\Generic\themeresources.xaml

にまとまっているようです。

<SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="#FF000000" />

しかし、指定されている色は WinUI 3 の色ではありません。

補足

Windows App SDK 1.2 時点の情報です。

Discussion