WPFアプリでライトテーマ・ダークテーマに対応するライブラリー#5 3.0.0-alpha02

前回の3.0.0-alpha01のリリースから一ヶ月くらい過ぎました。今回、3.0.0-alpha02をリリースします。

前回の3.0.0-alpha01のリリースでは、アクリルぼかし効果のウィンドウやUWP互換ブラシをサポートし、また、既存機能のバグ修正をしました。今回のバージョンにおいても、バグ修正や機能拡張を進めていきます。

mntoneさんのアクティビティ

前回のリリースでは、私による機能追加以外にも、mntoneさんによる機能追加やバグ修正を多く取り込んだことをお伝えしました。

nmtoneさんは、本家のMetroRadianceをフォークした後、いろいろな修正や機能拡張などをし、本家のMetroRadianceにプルリクエストしています。

前回の3.0.0-alpha01のリリースの直後に、本家のMetroRadianceで、いくつかのプルリクエスト(#37,#41,#43,#44)が取り込まれました。しかしながら、本家のMetroRadianceは、nugetに新しいパッケージが公開されていません。そのため、現時点(2020/09/23)ではmntoneさんプルリクエストを反映したnugetパッケージは、MetroRadiance.Forkだけとなります。

mntoneさんの活動は素晴らしいため、引き続きmntoneさんのMetroRadianceフォークをウォッチしています。

8月下旬から9月中旬までのMetroRadianceのレポジトリに関するアクティビティは以下の通りです。

MetroRadianceのInsight(Network,2020/09/23)

私は、8月下旬から9月12日までは、別件が忙しかったため、あまりコミットできていませんでした。9月13日以降は余裕が出てきたため、コミットを再開しました。

mntoneさんは、2020年9月4日までは、頻繁に新しいコードをコミットしています。しかし、それ以降は、コミットがぴたりと止まってしまいました。

mntoneさんのプルリクエストの取り込み

mntoneさんは、9月4日までの活動の多くを、本家のMetroRadianceにプルリクエストしています。

MetroRadiance.Forkにもそれらのプルリクエストをコードレビューしつつ取り込んでいきます。

本家MetroRadianceは、従来からのプロジェクトスタイル(.NET Framework専用)なので、mntoneさんのプルリクエストも、従来スタイルのプロジェクトです。しかし、MetroRadiance.Forkは、.NET Coreをサポートするために、新スタイルであるSDKスタイルのプロジェクトです。

そのため、本家のMetroRadianceのプルリクエストをMetroRadiance.Forkに取り込むときは、ほとんどの場合、コンフリクト(ソースコードの衝突)が発生します。そのため、本家のMetroRadianceのプルリクエストを取り込むのも、結構時間がかかります。

今回の3.0.0-alpha02では、現時点で上がっているプルリクエストは、問題ないと思い、すべて取り込みました。

mntoneさんのプルリクエスト化していないコミット

2020年09月26日時点で、コミットされているのにプルリクエスト化していないコミットがいくつかあります。

  • プロジェクトをSDKスタイルに変更
  • コードを近代化
  • メニュースタイルの追加
  • 高DPIサポート

などのコミットです。

一つ目は、MetroRadiance.Forkと同じように、従来形式のプロジェクトファイルから.NET Coreに対応したSDKスタイルのプロジェクトファイルへの変更です。

二つ目は、最新のC#の文法でソースコードを修正するものです。

三つ目は、メニューに対するスタイルの追加です。これにより、メニューのデザインもThemeのモード切替に追随するようになります。

四つ目は、高DPI対応です。これは、前回の投稿で、以下のように記載しました。

あと、現在(2020/08/15)の最新のコードは、ビルドターゲットのバージョン指定によって、外部公開APIが異なってしまうのも気になっており、取り込みを躊躇しています。

ところが、このプルリクエスト化していないコミットの高DPI対応は、アプリの高DPI対応宣言をハンドリングして動作する私が実現したかった処理に近いものです。

このコミットの最終版ができるのが待ち遠しいです。nmtoneさんのアクティビティが再開することを願って、しばらく待ちます。

しばらく待って、mntoneさんの最終版ができない(プルリクエストが発行されい)ようであれば、私が実装しようと思います。ただ、コードが分岐してしまうので、極力避けたいとは思っています。

MetroRadiance.Fork 3.0.0-alpha01 リリース

前回のバージョンから、現在までの機能拡張・バグ修正を反映した、MetroRadiance.Fork 3.0.0-alpha02をnutgetでリリースしました。nugetでは、ここから取得できます。

前回同様、MetroRadiance.Forkのドキュメントは以下のリンクとなります。

MetroRadiance.Fork 3.0.0-alpha02の新機能

このバージョンでは以下の機能を追加しました。

  • TextBoxコントロールのスタイルを追加
  • Labelコントロールのスタイルを追加
  • PromptTextBoxコントロールのローカライズ(en/ja/de/fr/ko/zh-Hans/zh-Hant)
  • 数値検証ルールを拡張(Int32Rule→Int16Rule/UInt16Rule/Int32Rule/UInt32Rule/SingleRule/DoubleRule)追加
  • MetroRadiance.Fork.Chrome.Externalsのパッケージを追加
  • サンプルアプリにMetroRadiance.Fork.Chrome.Externalsの使用例を追加
  • サンプリアプリに数値検証ルールの使用例を追加

コントロールのスタイルを追加

MetroRadiance.Forkが用意していたコントロールのスタイルは、一部の標準コントロールのみです。今回、TextBoxとLabelのスタイルを追加しました。MetroRadiance.Forkで用意しているコントールのスタイルは、テーマのモード変更(ライト、ダーク)やアクセントカラーの変更に追随します。

ローカライズ

前回のバージョンで、ローカライズはすべて終えたつもりでしたが、PromptTextBoxに対するローカライズ漏れがあったため、対応しました。具体的には、テキストが空のときに表示されるテキストのデフォルト値がローカライズされておらず「プロンプト」となっていました。これを「値を入力してください」に変更し、各言語用(en/de/fr/ko/zh-Hans/zh-Hant)も用意しました。

数値検証ルール

Int32Ruleだけであったカスタム検証ルールを、他の数値型にも対応しました。

下記の実装例では、数値検証ルールをTextBoxに適用した例(エラー文字列はツールチップに表示)とMetroRadiance.ForkのカスタムコントロールであるPromptTextBoxに適用した例です。

数値検証ルールの例

サンプリアプリ(Showcase)

今回の機能の追加に合わせて、いくつかの実装サンプルを追加しました。テキストボックスのテーマ適用例やカスタム数値検証ルールや外部ウィンドウへ外枠クロムの適用の例を追加しました。

MetroRadiance.Fork.Chrome.Externals パッケージ

MetroRadiance.Fork.Chrome.Externalsパッケージは、3.0.0-alpha版を作成していませんでした。しかし、サンプリアプリにMetroRadiance.Fork.Chrome.Externalsの例が追加されたことによって、必要になりました。そのため、MetroRadiance.Fork.Chrome.Externalsの従来形式のプロジェクトをSDKスタイルプロジェクトへコンバートして、パッケージを作成しました。

しかし、一部のモジュール(このプロジェクト外でビルドされるモジュール)について、.NET Core用のものが用意できなかったため、.NET Framework専用のパッケージとなります。

MetroRadiance.Fork.Chrome.Externalsの.NET Core対応は、後日したいと思います。

外部ウィンドウ(メモ帳)にウィンドウ枠クロムを適用した例

MetroRadiance.Fork.Chrome.Externalsを使って、外部ウィンドウ(メモ帳)に、外枠クロムを適用した例です。メモ帳のウィンドウの外枠に青色の外枠クロムが適用されているのが確認できます。

その他の修正

上記に挙げた機能追加以外に、バグ修正があります。詳細は、Readme.MD(英語日本語)やMetroRadianceのプルリクエストを参照してください。

取り込み済みのMetroRadianceのプルリクエストは、以下の通りです。

  • #51 Fix an issue that ThemeHelper isn’t enabled after reloading.
  • #50 Add default Label style
  • #49 Add a rule for each numeric type.
  • #48 Added default TextBox theme
  • #47 Improve RadioButton appearance.
  • #46 Fix ChromeWindow bug.
  • #44 Improve ChromeWindow (including memory leak fix).
  • #41 Fix Per-monitor DPI bug

これで、現在、MetroRadianceにあるプルリクエストは、#13以外はすべて取り込んだことになります。#13は、スライダーコントロールのスタイルの追加ですが、特定の用途に限定した実装になっており、取り込んでいません。


以上、MetroRadiance.Fork 3.0.0-alpha02のリリースの紹介でした。

コメントを残す