
ThemeManager では、既存のテーマを元に、一部のコントロールのスタイルのみを変更した拡張テーマを作ることができます。
上記の画像イメージでは、MetroDarkテーマをベースに、WPF標準コントロール Button の背景色と、 Border の背景色を変更しています。
実装方法
拡張テーマとして取り扱うリソースファイルを作成します。下記は、既存MetroDarkテーマのWPF標準コントロールのテーマリソース(MetroDark.MSControls.Core.Implicit.xaml)をマージしたうえで拡張しています。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Sample.Themes">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/InfragisticsWPF4.Themes.MetroDark.v19.1;component/Themes/MetroDark.MSControls.Core.Implicit.xaml" />
</ResourceDictionary.MergedDictionaries>
<!-- Buttonの背景色を緑に変更 -->
<Style TargetType="Button" >
<Setter Property="Background" Value="Green" />
</Style>
<!-- Borderを設定-->
<Style TargetType="Border">
<Setter Property="Background" Value="Black"></Setter>
<Setter Property="BorderBrush" Value="Gray"></Setter>
<Setter Property="BorderThickness" Value="1"></Setter>
</Style>
</ResourceDictionary>
新規のテーマクラスを作成します。拡張元の MetroDarkTheme を継承して作成します。
public class ExtendedMetroDarkTheme : MetroDarkTheme
{
protected override void ConfigureControlMappings()
{
base.ConfigureControlMappings();
// MS標準コントロールのテーマ情報を更新
string assemblyFullName = Assembly.GetExecutingAssembly().FullName;
Mappings[ControlMappingKeys.MsCoreControls] = ThemeBase.BuildLocationString(assemblyFullName, @"/Themes/ExtendedMetroDark.MsCoreControls.xaml");
}
}
作成した拡張テーマをテーママネージャーに適応します。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 拡張テーマを適応
ThemeManager.ApplicationTheme = new ExtendedMetroDarkTheme();
}
}