モダン UI アプリケーションのカスタム カラーを設定したいと考えています。この色は、GridView\ListView などの選択枠に使用されます。
PS GridViewItem のスタイルを変更できることはわかっていますが、アプリケーションで表示できるすべての場所でこの色を表示したいと考えています。
モダン UI アプリケーションのカスタム カラーを設定したいと考えています。この色は、GridView\ListView などの選択枠に使用されます。
PS GridViewItem のスタイルを変更できることはわかっていますが、アプリケーションで表示できるすべての場所でこの色を表示したいと考えています。
長い道のりは、アプリケーションのテーマ リソースを 1 つずつオーバーライドして、必要な色を取得することです。このソリューションについては、以前にMetro アプリ リソースのオーバーライドで説明しました。
かなり時間がかかり、対処するバリエーションがたくさんあります。それを行う最善の方法は、 Hammer.Pantsと呼ばれるオープン ソース ツールを使用することです。これは、指定された色がアプリケーション リソースの全範囲を生成する小さなコマンド ライン exe です。
ブラシのリストをオーバーライドすることにしました。このコードは誰かを助けるかもしれません:
private List<string> ResourcesColors = new List<string>
{
"PageAccentBrush",
"ListViewItemSelectedBackgroundThemeBrush",
"ListViewItemSelectedPointerOverBackgroundThemeBrush",
"ListViewItemSelectedPointerOverBorderThemeBrush",
"ComboBoxItemSelectedBackgroundThemeBrush",
"ComboBoxItemSelectedPointerOverBackgroundThemeBrush",
"ComboBoxSelectedBackgroundThemeBrush",
"ComboBoxSelectedPointerOverBackgroundThemeBrush",
"ListBoxItemSelectedBackgroundThemeBrush",
"ListBoxItemSelectedPointerOverBackgroundThemeBrush",
"ProgressBarForegroundThemeBrush",
"ProgressBarIndeterminateForegroundThemeBrush",
"SliderTrackDecreaseBackgroundThemeBrush",
"SliderTrackDecreasePointerOverBackgroundThemeBrush",
"SliderTrackDecreasePressedBackgroundThemeBrush",
"ToggleSwitchCurtainBackgroundThemeBrush",
"ToggleSwitchCurtainPointerOverBackgroundThemeBrush",
"ToggleSwitchCurtainPressedBackgroundThemeBrush"
};
private void ApplyColorsToResources()
{
if (this.Resources.ContainsKey("PageAccentBrush"))
{
SolidColorBrush pageAccentBrush = this.Resources["PageAccentBrush"] as SolidColorBrush;
if (pageAccentBrush != null)
{
SolidColorBrush scb = null;
foreach (var item in this.ResourcesColors)
{
scb = (SolidColorBrush)Application.Current.Resources[item];
scb.Color = pageAccentBrush.Color;
}
}
}
}