SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

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

ダウンロード 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の位置で定義されていると、ボタンの前景色は赤色で表示されます。

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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Silverlight実行基盤の強化

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Silverlight 4で作る新しいRIAアプリケーション連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5682 2011/01/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング