WPFでほかのデスクトップテーマを適用する方法
以下の2つのblogを参考にさせていただきました。
http://notstatic.com/archives/56
WPF: Changing control style based on the system theme – Lester's XAML Blog
WPFでは、LunaやRoyaleといったマイクロソフト公式のテーマを簡単に適用させる方法が用意されています。以下にその方法を紹介します。
参照設定で下記の4つのアセンブリを追加します。
- PresentationFramework.Aero.dll
- PresentationFramework.Classic.dll
- PresentationFramework.Luna.dll
- PresentationFramework.Royale.dll
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Theme" Height="300" Width="370"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Aero;component/themes/aero.normalcolor.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">aero.normalcolor</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Luna;component/themes/luna.normalcolor.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">luna.normalcolor</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Luna;component/themes/luna.homestead.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">luna.homestead</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Luna;component/themes/luna.metallic.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">luna.metallic</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Royale;component/themes/royale.normalcolor.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">royale.normalcolor</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Classic;component/themes/classic.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">classic</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
</Grid>
</Window>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Theme" Height="300" Width="370"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Aero;component/themes/aero.normalcolor.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">aero.normalcolor</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Luna;component/themes/luna.normalcolor.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">luna.normalcolor</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Luna;component/themes/luna.homestead.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">luna.homestead</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Luna;component/themes/luna.metallic.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">luna.metallic</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Royale;component/themes/royale.normalcolor.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">royale.normalcolor</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
<Grid Grid.Row="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.3*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="/presentationframework.Classic;component/themes/classic.xaml" />
</Grid.Resources>
<Button Grid.Column="0" Margin="10">classic</Button>
<ProgressBar Grid.Column="1" Margin="10" Value="50"/>
<ScrollBar Grid.Column="2" Orientation="Horizontal"/>
</Grid>
</Grid>
</Window>
実行すると、下記のように各テーマが適用された状態のボタンやプログレスバーが描画されます。