概要
ArcGIS Pro SDK では、ボタンだけでなくギャラリーを追加することができます。ギャラリーには複数のギャラリー アイテムを追加することができ、グループを設定して分類することができます。ここでは、カレント プロジェクトに挿入されたマップを取得し、そのタイプ (マップあるいはシーン) に応じてグループ表示するためのギャラリーを追加します。
サンプル コード
コード内の<>は半角に置き換えてからサンプル コードをご利用ください。
config.daml
ギャラリーの外観を daml ファイルで定義します。「galleries」カテゴリで、ギャラリー内に表示するギャラリー アイテムの列数 (itemsInRow) や、グループを表示するか (showGroup) といったプロパティを設定します。
<groups>
<group appearsonaddintab="true" caption="ギャラリー" id="MapListGallery_Group1">
<gallery inline="false" refid="MapListGallery_Gallery1" size="large">
</gallery></group>
</groups>
<controls>
</controls>
<galleries>
<gallery caption="マップリスト" classname="Gallery1" datatemplatefile="pack://application:,,,/MapListGallery;component//Gallery1Template.xaml" id="MapListGallery_Gallery1" itemsinrow="5" itemwidth="50" largeimage="pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/GenericButtonOrange32.png" resizable="true" showgroup="true" templateid="Gallery1ItemTemplate">
<tooltip heading="Tooltip Heading">Tooltip text<disabletext></disabledtext></tooltip>
</gallery>
</galleries>
Garally クラス
Garally クラスに、ギャラリーの処理を記述していきます。Initialize メソッドを実行した際に、ギャラリーにギャラリーアイテムを追加する処理を記述します。private void Initialize()
{
if (_isInitialized)
return;
//プロジェクトのマップを取得
var maps= Project.Current.GetItems<MapProjectItem>();
//マップの数だけループ
foreach (var map in maps)
{
//マップの名称を取得
string mapname = map.Name;
//マップ名のギャラリーアイテムを追加
//グループ名はMap クラスの MapType プロパティから取得
Add(new GalleryItem(mapname, this.LargeImage != null ? ((ImageSource)this.LargeImage).Clone() : null, mapname, map.MapType.ToString()));
}
_isInitialized = true;
}
OnClick イベント内で、クリックしたギャラリー アイテムをもとに処理を実装します。ここでは、クリックしたマップを開く処理を実装します。
protected async override void OnClick(GalleryItem item)
{
//TODO - insert your code to manipulate the clicked gallery item here
System.Diagnostics.Debug.WriteLine("Remove this line after adding your custom behavior.");
base.OnClick(item);
//クリックしたギャラリーアイテムからマップ アイテムを取得
var mapItem = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(
m => (m.Name == item.Text));
await QueuedTask.Run(() =>
{
//マップアイテムから Map オブジェクトを取得
Map map = mapItem.GetMap();
//マップ ビューを開く
ProApp.Panes.CreateMapPaneAsync(map);
});
}
参考情報
このナレッジはお役に立ちましたか?
フィードバックをいただきありがとうございます!