ダウンロード sample.zip (1.2 MB)
Silverlight実行基盤の強化
Silverlight 4では、ユーザーからの要望に応じて、印刷ダイアログの表示、プログラムからクリップボードへのアクセスといった機能が追加されています。
ここからは、Silverlight 4で強化された実行基盤について触れていきます。
ドラッグアンドドロップ
Silverlight 4では、デスクトップなどからファイルをドラッグしてSilverlight上にドロップすることが可能になりました。この機能を利用することで、デスクトップ上のファイルをSilverlight上にドロップして、テキスト情報や画像/動画情報をSilverlightのページ上に読み込むことができます。
図2にサンプルアプリケーションの動作イメージを示します。このサンプルは、ページ上部の緑色の四角形にファイルをドロップすると、その下にあるリストボックスにその内容を表示します。

リスト5は、このアプリケーションのXAMLコードです。
特に難しいところはありませんが、ファイルのドロップを許可する緑色の四角形(Rectangle)はAllowDrop属性にTrue(許可)を、ファイルのドロップを処理するDropイベントにRectangle_Dropイベントハンドラを指定しています。
<StackPanel x:Name="LayoutRoot">
<StackPanel>
<StackPanel>
<TextBlock Text="ファイルを下の領域にドロップしてください。" />
<Rectangle x:Name="dropTarget" Width="100" Height="100"
Fill="Green" AllowDrop="True" Drop="Rectangle_Drop" />
</StackPanel>
<ListBox x:Name="dropContents">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</StackPanel>
<StackPanel x:Name="commandPanel" />
</StackPanel>
C#側のコードをリスト6に示します。ドロップされたファイルは次の順序で処理を行います。
- ドロップされたファイルの一覧を取得する。
- ファイルの種類を判別する。
- ファイルごとに読込処理を行う。
/// <summary>
/// ドロップされたファイルの拡張子ごとにファイルを読み出し、リストボックスに表示する。
/// </summary>
private void Rectangle_Drop(object sender, DragEventArgs e)
{
// 1.ドロップされたファイルの一覧を取得する。
var item = e.Data.GetData(DataFormats.FileDrop);
var dropFiles = item as FileInfo[];
if (dropFiles == null) return;
foreach (var dropFile in dropFiles)
{
ListBoxItem listItem = null;
// 2.ファイルの種別を判別する。
if (0 < (new string [] {".txt", ".cs", ".vb"})
.Count(ext => ext == dropFile.Extension))
listItem = LoadText(dropFile); // 3.ファイルごとに読込処理を行う
else if (0 < (new string [] {".png", ".jpg", ".jpeg"})
.Count(ext => ext == dropFile.Extension))
listItem = LoadImage(dropFile); // 3.ファイルごとに読込処理を行う
if (listItem == null)
return;
dropContents.Items.Add(listItem);
}
}
/// <summary>
/// 3.ファイルごとに読込処理を行う
/// テキストファイルの情報を読み込む
/// </summary>
private static ListBoxItem LoadImage(FileInfo dropFile)
{
using (var readStream = dropFile.OpenRead())
{
var bitmapImage = new BitmapImage();
bitmapImage.SetSource(readStream);
return new ListBoxItem
{
Height = 100, Width = 100,
Content = new Image
{
Stretch = Stretch.Fill,
Source = bitmapImage,
},
};
}
}
それぞれの処理を見ていきましょう。
- ドロップされたファイルの一覧を取得する
- ファイルの種類を判別する
- ファイルごとに読込処理を行う
ドロップされたファイルの一覧は、DragEventArgsクラスのDataプロパティがもつGetDataメソッドで取得できます。GetDataメソッドでドロップされたファイルの情報を取得するためには、文字定数DataFormats.FileDropを指定します。
GetDataメソッドで取得したデータはFileInfoクラスの配列なので、ファイルの拡張子ごとに処理を分岐します。
拡張子ごとにFileInfoオブジェクトからファイルを読み出し、リストボックスにアイテムを追加します。ここでは、イメージデータを取得するLoadImageメソッドだけを掲載していますが、サンプルには、テキストファイルからデータを取得するLoadTextメソッドも含まれているので確認してください。
このサンプルを実行すると図2の画面が起動します。緑色の四角形にファイルをドロップすると、リストボックスにそのファイルの内容が読み込まれることを確認できます。
この記事は参考になりましたか?
- 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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
