Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Silverlight 4で強化された実行環境

Silverlight 4で作る新しいRIAアプリケーション(5)

  • LINEで送る
  • このエントリーをはてなブックマークに追加

ダウンロード sample.zip (1.2 MB)

   Silverlight 4では、ユーザーの要望を反映して印刷オブジェクトへのアクセス、クリップボードへのアクセスといった実行基盤の機能が大幅に拡張され、スタイルやバインディングといったXAMLプログラミングの環境も強化されています。今回は、印刷やクリップボードのアクセスなどの業務アプリケーションの開発に欠かせない機能と、Silverlight 4で強化されたスタイルについて解説します。

目次

はじめに

 Silverlight 4では、ユーザーの要望を反映して、印刷オブジェクトへのアクセス、クリップボードへのアクセスといった実行基盤の機能が大幅に拡張されました。また、スタイルやバインディングといったXAMLプログラミングの環境も強化されています。

 今回は、印刷やクリップボードのアクセスといった業務アプリケーションの開発に欠かせない機能と、Silverlight 4で強化されたスタイルについて解説します。

XAMLプログラミングにおけるスタイルの強化点

 Silverlightでは、画面要素はXAMLという宣言型のXMLで定義します。SilverlightはWPFのサブセットとして定義されているため、SilverlightのXAMLの多くはWPFのXAMLと同じように記述できます。しかし、一部互換性がなかったり機能そのものが実装されていない部分がありました。

 Silverlight 4になりいくつかの機能が実装され、よりアプリケーションの構築がしやすい環境が実現されています。Silverlightでは段階的にXAMLの機能が強化されています。特にひとつ前のバージョンであるSilverlight 3では、BaseOnスタイルやバインディングによる値の検証、リソースディクショナリーのマージなどが実装された重要なバージョンです。これらの説明は、Silverlight 3の連載を参照してください。

暗黙のスタイル

 アプリケーション全体やページ内のコントロールに、そのページの標準的なスタイルを適用させたい場合はどうすればいいでしょうか。

 Silverlight 4では、コントロールごとの暗黙のスタイルを定義することで、アプリケーションやページで統一された標準的なスタイルを定義することが可能になりました。

 Silverlight 4では、x:Key属性で名前を指定しない場合、TargetType属性で指定したコントロールに対しての暗黙のスタイルとして扱われます。

 リスト1は、Buttonコントロールに対して、暗黙のスタイルを定義した例です。

リスト1 Buttonコントロールに対する暗黙のスタイル(XamlSample.xaml)
<UserControl.Resources>
   <ResourceDictionary> 
       <!-- 大きなボタンのスタイル -->
       <Style TargetType="Button" x:Key="BigStyle">
           <Setter Property="Width" Value="100" />
           <Setter Property="Height" Value="50" />
       </Style>
       <!-- ボタンの暗黙的なスタイル -->
       <Style TargetType="Button">
           <Setter Property="Width" Value="60" />
           <Setter Property="Height" Value="20" />
       </Style>
   </ResourceDictionary>
</UserControl.Resources>

 暗黙のスタイルは、TargetType属性に指定したコントロールのみが対象になります。例えば、Buttonコントロールから派生させたMyButtonコントロールがあったとしても、Buttonコントロールに対する暗黙のスタイルは適用されない点に注意が必要です。リスト2はリスト1のスタイルを適用した例です。

リスト2 Buttonコントロールに対する暗黙のスタイル(XamlSample.xaml)
<StackPanel>
   <Button Content="ぼたん1" />
   <Button Content="ぼたん2" />
   <Button Content="ぼたん3" Style="{StaticResource BigStyle}" />
   <my:MyButton Content="ぼたん4" />        
</StackPanel>

 実行すると図1のように表示されます。「ぼたん1」や「ぼたん2」には暗黙のスタイルが適用されていますが、個別にスタイルを指定している「ぼたん3」や、Buttonコントロールではない「ぼたん4」には暗黙のスタイルが適用されていないことが確認できます。

図1 暗黙のスタイルの実行例
図1 暗黙のスタイルの実行例

 今回の例では、ページのResourceDictionaryに暗黙的なスタイルを定義していますが、アプリケーション内のすべてのページで同じスタイルを利用したい場合、App.XamlのResourceDictionaryに定義すると、各ページごとにResourceDictionaryを定義しなくても、アプリケーション全体に暗黙のスタイルを適用できます。

スタイルの優先順位

 コントロールに対して複数のリソースが定義されていた場合、最後に定義されたリソースがコントロールに適用されます。

 リスト3とリスト4の例で確認してみましょう。

リスト3 ボタンの前景色は青色で表示される
<ResourceDictionary.MergedDictionaries>
   <ResourceDictionary Source="Dictionary1.xaml" />    <!-- ①  -->
   <ResourceDictionary>
      <Style TargetType="Button">
          <Setter Property="Foreground" Value="Blue" />
      </Style>
   </ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
リスト4 ボタンの前景色は赤色で表示される
<ResourceDictionary.MergedDictionaries>
   <ResourceDictionary>
      <Style TargetType="Button">
          <Setter Property="Foreground" Value="Blue" />
      </Style>
   </ResourceDictionary>
   <ResourceDictionary Source="Dictionary1.xaml" />    <!-- ②  -->
</ResourceDictionary.MergedDictionaries> 

 例えば外部リソースファイル(Dictionary1.xaml)にボタンの前景色を赤くする定義があった場合、リスト3の1の位置に定義されていると、ボタンの前景色は青色になります。しかし、リスト4の2の位置で定義されていると、ボタンの前景色は赤色で表示されます。

 この優先順位は、リソースディクショナリー内での定義順であり、ページの内部に定義されたか、外部ファイルかではない点に注意してください。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

  • WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

バックナンバー

連載:Silverlight 4で作る新しいRIAアプリケーション

もっと読む

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5