.NET 9.0 기반 Fluent 테마 적용 방법
.NET 9.0이 출시 되고 곧 .NET 10이 나오고 있는 가운데, Win11 테마 적용 관련된 글이 이 외에는 존재하지 않더군요. 그래서 정리를 해보았습니다.
애플리케이션 전체에 Fluent 테마 적용하기
애플리케이션의 모든 창과 컨트롤에 Fluent 테마를 적용하려면, App.xaml
파일의 <Application.Resources>
섹션에 ResourceDictionary
를 추가하면 됩니다. 이 방식은 가장 광범위하게 테마를 적용하는 방법입니다.
<Application
x:Class="YourSampleApplication.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:YourSampleApplication">
<Application.Resources>
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
</Application.Resources>
</Application>
특정 창 또는 컨트롤에만 테마 적용하기
전체 앱이 아닌 Window
, UserControl
, ContentControl
, 또는 Border
와 같은 일부 요소에만 테마를 적용하고 싶다면, 해당 요소의 <Window.Resources>
또는 <UserControl.Resources>
섹션에 ResourceDictionary
에 추가하세요.
이 방법은 특정 부분에만 다른 스타일을 적용할 때 유용합니다.
<Window
x:Class="YourSampleApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:YourSampleApplication"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
</Window.Resources>
<Grid>
</Grid>
</Window>
Fluent 테마를 라이트(Light) 또는 다크(Dark) 모드로 고정하기
Fluent.xaml
은 시스템 테마 설정에 따라 자동으로 라이트 또는 다크 모드로 변경됩니다. 만약 테마를 특정 모드로 고정하고 싶다면, 다음 파일 중 하나를 선택해서 사용하면 됩니다.
-
라이트 모드 고정:
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.Light.xaml" />
-
다크 모드 고정:
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.Dark.xaml" />
실험적인 ThemeMode API 사용하기
WPF 컨트롤에 ThemeMode
라는 실험적 API가 추가되었습니다. 이 API를 사용하면 XAML에서 직접 테마를 지정할 수 있습니다.
-
ThemeMode="System"
: 시스템 설정에 따릅니다. -
ThemeMode="Light"
: 라이트 모드로 고정합니다. -
ThemeMode="Dark"
: 다크 모드로 고정합니다. -
ThemeMode="None"
: Aero2 테마(기존 테마)를 사용합니다.
주의 사항: ResourceDictionary
를 사용할 때는 XAML 디자이너 미리보기에서 테마가 적용된 디자인을 볼 수 있지만, ThemeMode
를 사용하면 미리보기에서 기존 테마로만 보일 수 있습니다.
또한, ThemeMode
사용 시 WPF0001 경고가 발생할 수 있습니다. 이 경고를 무시하려면 프로젝트 파일(.csproj
)에 <NoWarn>
속성을 추가하거나, 코드에 #pragma warning disable WPF0001
를 추가해야 합니다.
-
.csproj 파일에 추가:
XML
<PropertyGroup> <NoWarn>$(NoWarn);WPF0001</NoWarn> </PropertyGroup>
-
코드에 추가:
C#
#pragma warning disable WPF0001
BackDrop
관련 내용도 있긴 한데..직접 실험해보고 정리해서 올리도록 하겠습니다.