今回のサンプルは、解説が長くなるため、前編と後編の2回に亘って、1つのサンプルについて解説します。
まず初めに、このサンプルで実装する機能の動作を、下記に解説しておきます。Expression Blend 4(以下Blend 4)に実装されているTransitionEffectのPixelateを使って、特殊効果を伴ってコントロールを表示します。
画面上には[Image]、[DataGrid]、[RichTextBox]の3つのボタンが表示されています。ボタンをクリックすると該当するコントロールがPixelate効果を伴って表示されます。表示されるコントロールにはデータがバインドされています(図1)。
前編では、各コントロールへのデータバインドがメインになります。TransitionEffectによる、コントロールへの特殊効果の適用は、後編で解説します。

|
図1:ボタンに該当するコントロールがPixelateを伴って表示される(クリックで拡大) |
サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。
新規プロジェクトの作成
早速サンプルを作っていきましょう。本稿では開発言語にVisual Basicを用います。
VS 2010のメニューから「ファイル(F)/新規作成(N)/プロジェクト(P)」を選択します。次に、「Silverlight アプリケーション」を選択して、「名前(N)」に任意のプロジェクト名を指定します。ここでは「SL4_TransitionEffect_Element」という名前を付けています。
次に、画像のファイル名を記録したXMLファイル(リスト1)、個人情報を記録したXMLファイル(リスト2)、William Blakeの詩を記述したXMLファイル(リスト3)を追加します。XMLデータはLINQ to XMLで処理するため、「プロジェクト(P)/参照の追加(F)」からSystem.Xml.Linqを追加しておきます。
ソリューションエクスプローラー内にImageというフォルダを作成して、画像も追加しておきます。
リスト1 画像名を記録したXMLファイルで、ListBoxに使用(Photo.xml)
リスト2 個人情報を記録したXMLファイルで、DataGridに使用(sampleData.xml)
リスト3 William Blakeの詩を記述したXMLファイルで、RichTextBoxに使用(WilliamBlake.xml)
04 | <タイトル 著者="William Blake">木霊が原(こだまがはら)</タイトル> |
17 | William Blake「THE ECHOING GREEN(SONGS OF INNOCENCE)」 |
18 | 訳:薬師寺聖(1997/8/15,Web公開) |
ダウンロードされたサンプル・ファイルにはXMLファイルや画像は追加済みです。
Silverlightユーザーコントロール(TransitionEffectElementShow.xaml)の作成
VS2010のメニューから「プロジェクト(P)/新しい項目の追加(W)」と選択し、「Silverlightユーザーコントロール」を作成します。「名前(N)」には「TransitionEffectElementShow.xaml」と指定し、[追加(A)]ボタンをクリックします(図2)。

|
図2:「TransitionEffectElementShow.xaml」という名前のSilverlightユーザーコントロールを作成する(クリックで拡大) |
XAMLコード内の要素のWidthに700、Heightに500と指定します。
次に、~をと書き換えておいてください。複数のコントロールを重ねるため、ListBoxに表示させた画像が一部選択できない不具合や、DataGridのヘッダをクリックしてのソートができないといった不具合を解消するため、コード内でCanvas.ZindexPropertyを使用して、該当するコントロールを一番前面に配置する必要があるからです。後編のコード内で記述します。
ListBoxコントロールの設定
まずツールボックスから画像の一覧を表示する、ListBoxコントロールを配置します。通常、ListBoxにはデフォルトで縦一列に画像が表示されますが、今回はItemsPanelTemplateにWrapPanelを定義して、横に複数行に渡って画像を表示させます。そこで長方形にListBoxコントロールを配置します。プロパティからx:NameにImage_ListBoxと指定します(図3)。
WrapPanelコントロールはSilverlight4 Toolkitに含まれています。Silverlight4 Toolkit(Silverlight_4_Toolkit_April_2010.msi)を下記よりダウンロードしてインストールしておいてください。
→ Silverlight 4 Toolkit - April 2010

|
図3:ListBoxコントロールを配置する。x:NameにImage_ListBoxと指定する(クリックで拡大) |
書き出されるXAMLコードをリスト4のように編集します。
リスト4 編集されたXAMLコード(TransitionEffectElementShow.xaml)
01 | (1)<ListBox>要素のテンプレートを定義します。<UserControl.Resources>プロパティ要素内に、 |
02 | <UserControl.Resources> |
03 | <DataTemplate x:Key="ListBoxItemTemplate"> |
07 | </Grid.RowDefinitions> |
09 | <Image Width="160" Height="120" Source="{Binding 画像名}" Margin="10"/> |
14 | と記述し、ListBoxItemTemplateというキーのテンプレートを定義します。<Grid.RowDefinitions> プロパティ要素内で、<RowDefinition/>要素を定義すると、<Grid>要素に適用する1行が定義されます。<Image>要素を記述します。Sourceプロパティに{Binding 画像名}と指定します。ここで指定した「画像名」はプログラムコード内のクラスで定義するプロパティ名と同じである必要があります。Width、Height、Marginプロパティを設定します。Marginプロパティには10を指定し、画像の周囲に10ピクセルの余白を設けます。 |
16 | (2)<ListBox>要素だけでは、画像は縦1列に並んで表示されてしまいます。そこで、<toolkit:WrapPanel>要素を<ItemsPanelTemplate>要素内に記述します。 |
18 | <ItemsPanelTemplate x:Key="WrapPanelListBox"> |
19 | <toolkit:WrapPanel Width="580"/> |
21 | のように記述して、WrapPanelListBoxというキーのテンプレートを定義します。 |
23 | (3)これらの定義済みListBoxItemTemplateとWrapPanelListBoxを、x:NameがImage_ListBoxである<ListBox>要素に、 |
24 | ItemsPanel="{StaticResource WrapPanelListBox}" ItemTemplate="{StaticResource ListBoxItemTemplate}" |
25 | のように指定します。StaticResourceは、定義済みのリソースを参照します。 |
33 | d:DesignHeight="300" d:DesignWidth="400" Width="700" Height="500"> |
34 | <UserControl.Resources> |
35 | <DataTemplate x:Key="ListBoxItemTemplate">■(1) |
39 | </Grid.RowDefinitions> |
41 | <Image Width="160" Height="120" Source="{Binding 画像名}" Margin="10,10,10,10"/> |
46 | <ItemsPanelTemplate x:Key="WrapPanelListBox">■(2) |
47 | <toolkit:WrapPanel Width="580"/> |
49 | </UserControl.Resources> |
50 | <Canvas x:Name="LayoutRoot" Background="White"> |
51 | <ListBox Height="443" HorizontalAlignment="Left" x:Name="Image_ListBox" VerticalAlignment="Top" Width="647" ItemsPanel="{StaticResource WrapPanelListBox}" ItemTemplate="{StaticResource ListBoxItemTemplate}" />■(3) |
ソリューションエクスプローラー内から、TransitionEffectElementShow.xamlを展開して表示される、 TransitionEffectElementShow.xaml.vbをダブルクリックして、リスト5のようにロジックコードを記述します。