KatsuYuzuのブログ

.NET の開発をメインとした日記です。

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を選択出来るようにします。