ついに Windows Forms にも標準で ダークテーマ が、.NET 9 以降から徐々に対応され始め、正式には .NET 10 からのサポートとなりました。
設定は極めて容易で、Program.cs 内で Application.SetColorMode() メソッド、この1行を呼び出すだけです。
Application.SetColorMode(SystemColorMode.Dark);

第1引数へデフォルトのカラーモードとして、以下の3つのいずれかを設定することができます。
※初期設定値。
従来の、レガシーな Windows Forms のカラーモード(ライトテーマ)になります。
Application.SetColorMode(SystemColorMode.Classic);

ユーザーが設定している、「個人用設定」→「テーマ」→「色」の「モード」で設定しているカラーモードに応じて、ライトテーマ か ダークテーマ か、が自動で適応されます。
Application.SetColorMode(SystemColorMode.System);

上の設定に応じて

または

新たにサポートされた、ダークテーマになります。
Application.SetColorMode(SystemColorMode.Dark);

当然のことながら、レガシーな .NET Framework の WinForms では使えません。モダンな .NET の 9 以降で使うことができます。
ダークテーマは、Windows 11 以降でのみ有効です。
Windows にて、視覚補助設定の「ハイコントラストモード」を有効にしている場合は、Windows の設定側でダークモードにしていて、かつ SystemColorMode.Dark をセットしていたとしても、 WinForms アプリに今回の新たなダークテーマは適用されません。
あくまで WinForms アプリ起動時のデフォルトカラーモードの設定であり、アプリ起動後に Windows 設定から、システムカラーを、ライトからダーク、もしくはダークからライトへと変更したときの挙動としては SystemColorMode.System をセットしていたとしても、自動的にはカラーモードが変わらないです。
いままでは、WinForms アプリ画面の「キャプション(ウィンドウタイトル文字)の文字色」を弄るには、Win 32 API を使って自身の ウィンドウハンドル (HWND) から Window ID を取得して、 Windows App SDK (Microsoft.UI.Windowing.AppWindow) を使ってデコる必要があり、かなりの手間でした。
.NET 10 以降の WinForms では、Form クラスに FormCaptionTextColor プロパティが新たに追加され、とても簡単に画面の「キャプション(ウィンドウタイトル文字)の文字色」を変更することができるようになっています。
this.FormCaptionTextColor = Color.Gold;


いままでは、WinForms アプリ画面の「タイトルバーの背景色」を弄るには、Win 32 API を使って自身の ウィンドウハンドル (HWND) から Window ID を取得して、 Windows App SDK (Microsoft.UI.Windowing.AppWindow) を使ってデコる必要があり、かなりの手間でした。
.NET 10 以降の WinForms では、Form クラスに FormCaptionBackColor プロパティが新たに追加され、とても簡単に画面の「タイトルバーの背景色」を変更することができるようになっています。
this.FormCaptionBackColor = Color.SaddleBrown;


.NET 10 以降の WinForms では、Form クラスに FormCornerPreference プロパティが新たに追加され、ウィンドウの角の丸み具合を3段階で調整できるようになりました。
this.FormCornerPreference = FormCornerPreference.RoundSmall;

デフォルト。
※Windows 11 では、Round と同等。
this.FormCornerPreference = FormCornerPreference.Default;

角の丸みなし。
this.FormCornerPreference = FormCornerPreference.DoNotRound;

角の丸みあり。
this.FormCornerPreference = FormCornerPreference.Round;

角の丸みがわずかにあり。
this.FormCornerPreference = FormCornerPreference.SmallRound;

.NET 10 以降の WinForms では、Form クラスに FormBorderColor プロパティが新たに追加され、画面の境界線色を容易に変更することができるようになりました。
this.FormBorderColor = Color.DodgerBlue;

※ 使用ライブラリとして、 CommunityToolkit.Mvvm 8.4.0 を NuGet 参照に追加して作成しています。
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace WinFormsDarkTheme;
/// <summary>Form1 クラス</summary>
public partial class Form1 : Form
{
/// <summary>Form1 ビューモデル</summary>
private readonly Form1ViewModel _viewModel = new();
/// <inheritdoc />
public Form1()
{
InitializeComponent();
// ビューモデルをデータバインド
this.viewModelBindingSource.DataSource = _viewModel;
// 画面の境界線を点滅させる処理を、別スレッドにて非同期で実行
Task.Run(async () => await BlinkFormBorder());
}
/// <summary>画面の境界線を点滅させる非同期メソッド</summary>
private async Task BlinkFormBorder()
{
// ビューモデルからキャンセレーショントークンを取得
var token = _viewModel.Cts.Token;
try
{
bool toggle = false;
// キャンセレーションがかかるまでずっと、1秒ごとに画面の境界線の色を切り替える
while (true)
{
token.ThrowIfCancellationRequested();
await Task.Delay(1000, token);
await InvokeAsync(
() => this.FormBorderColor = toggle ? Color.Salmon : Color.Gold
);
toggle = !toggle;
}
}
catch (OperationCanceledException)
{
// キャンセレーションがかかったら、画面の境界線の色をデフォルトへ戻す
await InvokeAsync(
() => this.FormBorderColor = SystemColors.ActiveBorder
);
}
}
}
/// <summary>Form1 ビューモデル クラス</summary>
public partial class Form1ViewModel : ObservableObject
{
/// <summary>キャンセレーショントークンソース</summary>
public CancellationTokenSource Cts { get; } = new();
/// <summary>現在の数値</summary>
[ObservableProperty]
private int currentValue;
/// <summary>カウントアップコマンド</summary>
/// <remarks>現在の数値をインクリメントします。</remarks>
[RelayCommand]
private void Increment()
=> CurrentValue++;
/// <summary>停止コマンド</summary>
/// <remarks>画面の境界線の点滅を停止します。</remarks>
[RelayCommand]
private void Stop()
=> Cts.Cancel();
}
