私は、WPF を使用して、かなり洗練された Windows 8 風のインターフェイスを作成しました。それはすでに私が望むよりもはるかに優れていますが、私は次のことを疑問に思っていました:
ユーザーが設定した現在のウィンドウの色を取得することは何とか可能ですか? デスクトップを右クリックすると、Aero の色を設定できます... GUI のいくつかのキャンバス要素にその色を使用する予定です。
前もって感謝します!
SystemColoursクラスはまさにこの目的のために存在します。そのように直接バインドできます
"{DynamicResource {x:Static SystemColors.WindowColorKey}}"
これについては、ColorizationColor レジストリ キーを照会できます。
さらに一歩進んで、16 進数の色の値を取得するメソッドを作成しました。これがお役に立てば幸いです。
public void SomeMethod()
{
int argbColor = (int)Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM","ColorizationColor", null);
var color = System.Drawing.Color.FromArgb(argbColor);
string hexadecimalColor = ConverterToHex(color);
}
private static String ConverterToHex(System.Drawing.Color c)
{
return String.Format("#{0}{1}{2}", c.R.ToString("X2"), c.G.ToString("X2"), c.B.ToString("X2"));
}
ここでは、NuGet でも利用できるオープンソース ライブラリを作成しました。
install-package aerocolor-wpf.AeroColor
パッケージをインストールした後、必要に応じてDynamicResource
呼び出された を参照できます。AeroColor
AeroBrush
必要なセットアップ コードもいくつかありますが、それほど多くはありません。Loaded
以下に示すように、ウィンドウのイベント ハンドラーに何かを入れるだけです。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
AeroResourceInitializer.Initialize();
}
}
このライブラリの優れた点は、フックもインストールされることです。フックは、システム内で実際の Aero カラーが変更されると、これらのリソースを更新します。これは、それを処理する必要がないことを意味DynamicResource
します。XAML で の代わりに a を使用して色を指す場合StaticResource
、WPF は UI の色も自動的に更新します。
Windows 8 が Aero の色を過渡的に変更し、あなたの色がそれに追従すると、非常にクールに見えます。