Map App SDKのアップデート
今回は,
これまで使用してきたMap App SDKおよび開発用のMap AppのMap app test toolが,
今回の更新でVisual StudioのMap Appプロジェクトテンプレートを使用した場合,
この更新に合わせて,
さらに,
以前のSDKをアンインストール後,
パネルのイベント
前回,
- リンクのクリック
(HyperlinkButton_ Click) - リストボックスのドロップ
(PhotoListBox_ Drop) - ボタンのクリック
(Button_ Click)
前回に作成済みのMyPhotoPanelクラス,
ボタンのクリック
まず,
- ファイルを開くダイアログを表示
- 選択された写真
(JPEG) ファイルを読み込み, PhotoEntityオブジェクトを生成 - PhotoEntity オブジェクトをPhotoItemsコレクションに追加
- PhotoEntityオブジェクトをレイヤーに追加
- 追加した地点へ地図を移動
PhotoEntityは前回作成したエンティティ クラス,
上記内容のコードを記述すると次のようになります。
private void Button_Click(object sender, RoutedEventArgs e)
{
// ファイルを開くダイアログを表示
var dialog = new OpenFileDialog();
dialog.Filter = "写真ファイル(*.jpg, *.jpeg)|*.jpg;*.jpeg";
if (dialog.ShowDialog() != true)
{
return;
}
try
{
// PhotoEntity 作成
var entity = CreateEntity(dialog.File); // (CreateEntity は後で作成)
if (entity != null)
{
// コレクションに追加
PhotoItems.Add(entity);
// レイヤーに追加
this.plugin.MainLayer.Entities.Add(entity);
// 追加した地点へ地図を移動
this.plugin.DefaultMap.SetView(entity, 15);
}
}
catch (Exception)
{
// Do nothing
}
}
CreateEntityメソッドは後で作成します。
リストボックスへファイルのドロップ
続いてListBoxのDropイベント処理です。Silverlight 4からWebブラウザーにドロップされたファイルを開くことができるようになっています。ボタンクリック処理と同様に,
ドロップを許可するには,
private void PhotoListBox_Drop(object sender, DragEventArgs e)
{
try
{
var files = (FileInfo[])e.Data.GetData(DataFormats.FileDrop);
PhotoEntity lastEntity = null;
foreach (var f in files)
{
var entity = CreateEntity(f);
if (entity != null)
{
lastEntity = entity;
PhotoItems.Add(entity);
this.plugin.MainLayer.Entities.Add(entity);
}
}
// 最後に追加した写真の場所へ移動
if (lastEntity != null)
{
this.plugin.DefaultMap.SetView(lastEntity, 15);
}
}
catch (Exception)
{
// Do nothing
}
}
複数のファイルがドロップされた場合も対応しています。そのためボタンクリック時とは少し記述が異なりますが,
Silverlightアプリケーションでは,
リンクのクリック
最後にHyperlinkButtonのClickイベントの処理です。ListBox内の各アイテムはひとつのHyperlinkButtonがあり,
private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
var entity = (PhotoEntity)((HyperlinkButton)sender).DataContext;
this.plugin.DefaultMap.SetView(entity, 15);
}
少しわかりにくいかもしれませんが,
以上でイベント処理の記述は完了です。