SilverlightのTheme適用について その2「コードからの適用」
コードからの適用
前回はXAMLでのマークアップでした。今回はコードから適用してみます。
XAMLはこんな感じで、前回との違いはLayoutRootを囲っているコントロールがExpressionDarkThemeではなくThemeになっているところです。
<UserControl x:Class="ThemingSample.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"> <toolkit:Theme> <Grid x:Name="LayoutRoot" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Top"> <StackPanel> <TextBlock Text="TextBlock" /> <Button Content="Button"/> <CheckBox Content="CheckBox"/> <RadioButton Content="RadioButton"/> </StackPanel> </Grid> </toolkit:Theme> </UserControl>
次にThemeのResourceDictionaryが記述されたXAMLをプロジェクトに追加します。
ToolkitのThemeのXAMLは"Program Files"以下の"\Microsoft SDKs\Silverlight\v4.0\Toolkit\Apr10\Themes\Xaml\"にあります。
このXAMLをコードから読み込んで適用させます。
private void Application_Startup(object sender, StartupEventArgs e) { var themeUri = new Uri(@"/ThemingSample;component/Theme/System.Windows.Controls.Theming.ExpressionDark.xaml", UriKind.Relative); System.Windows.Controls.Theming.Theme.SetApplicationThemeUri(App.Current, themeUri); this.RootVisual = new MainPage(); }
これで前回と同じ見た目になります。
引数で渡したApplicationのMergedDictionariesに適用されているので、どこで処理を行っても構いません。
ちなみにExpressionDarkThemeコントロールではコンストラクタで行われています。
まとめ
Themeコントロールではさんだり、SetApplicationThemeUriをしたり、ラジバンダリ!
Themingで調べると、ImplicitStyleManager(以前のバージョンのToolkitで提供されていて今は廃止されている)を使ったサンプルが目立っていたので「Silverlight 4 Toolkit - April 2010では?」という投稿でした。
次回
これだけでは面白くもなんともないのでユーザーがThemeを選択出来るようにします。