🧊
テーマの実際の色等をコードで取得する
はじめに
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