Практические советы: Начало работы
ArcGIS Viewer for Silverlight включает интерфейс расширения API, предоставляющий пользователям доступ к карте и выбранному слою, способы показа пользовательского интерфейса (UI) в диалоговых окнах и возможность сохранения и загрузки данных настройки. Расширение API включено в ArcGIS Extensbility SDK for Silverlight. Чтобы начать работу, определите, будете ли вы создавать инструмент или поведение. Как только вы выбрали тип создаваемого вами add-in, ознакомьтесь с соответствующим разделом Работа с картой и выбранным слоем для получения полной информации о доступе к карте с помощью вашего add-in.
Инструменты и поведения
Инструменты являются самым простым способом логики поверхности, которая должна использоваться пользователем. Если необходимо, чтобы функционал, разрабатываемый вами, запускался нажатием на кнопку на панели инструментов, вам нужно встроить этот функционал в инструмент. Инструмент идентификации является примером ситуации, когда создается пользовательская кнопка на панели инструментов.
Поведения карты являются простейшим способом обеспечения функционала, который всегда активирован. Поведения карты обеспечивают функциональность без необходимости взаимодействия с пользователем. Если вы разрабатываете функционал, добавляющий возможность или модификацию, которые должны всегда присутствовать, то он должен быть встроен в качестве поведения карты. Поведения карты можно использовать, к примеру, для ограничения экстента карты, показа координат курсора или отображения вводного диалогового окна при запуске приложения.
Для получения более подробной информации и знакомства с примерами см. разделы Создание инструмента и Создание поведения карты.
Работа с картой и выбранным слоем
Доступ к карте и выбранному слою можно осуществить через свойства статического объекта ESRI.ArcGIS.Client.Extensibility.MapApplication. Объект MapApplication доступен через свойство MapApplication.Current. Для доступа к объекту карты используйте в коде вашего add-in MapApplication.Current.Map. Для доступа к выбранному слою используйте MapApplication.Current.SelectedLayer. Код простой команды в разделе Создание инструмента показывает порядок доступа к карте с помощью метода CanExecute. Следующий код показывает пример простой команды, в которой идентификатор выбранного слоя показывается, если инструмент выполняется, и логика метода CanExecute такова, что инструмент включен только в случае, если выбран графический слой.
[Export(typeof(ICommand))]
[DisplayName("Show GraphicsLayer ID")]
[Category("My Tools")]
[Description("Shows the ID of the selected GraphicsLayer")]
[DefaultIcon("Path to icon, ex: "/Viewer.Addins;component/Images/Identify.png"")]
public class ShowGraphicsLayerIdCommand : ICommand
{
public void Execute(object parameter)
{
// Show the selected layer's ID.
MapApplication.Current.ShowWindow("Layer ID", new TextBlock()
{
Text = MapApplication.Current.SelectedLayer.ID,
TextWrapping = TextWrapping.Wrap,
Margin = new Thickness(30),
MaxWidth = 480
});
}
public bool CanExecute(object parameter)
{
// Return true (that is, make the command executable) only if the selected layer is a GraphicsLayer.
return MapApplication.Current.SelectedLayer is GraphicsLayer;
}
public event EventHandler CanExecuteChanged;
}
[Export(typeof(Behavior<Map>))]
[DisplayName("Show Selected Layer Name Behavior")]
[Category("My Behaviors")]
[Description("Shows a message box with the selected layer name")]
public class ShowSelectedLayerNameBehavior : Behavior<Map>
{
protected override void OnAttached()
{
base.OnAttached();
// Add a handler to the applications's SelectedLayerChanged event.
MapApplication.Current.SelectedLayerChanged += ShowSelectedLayerName;
}
private void ShowSelectedLayerName(object s, EventArgs args)
{
// Show a message box with the selected layer name.
string layerName = MapApplication.Current.SelectedLayer.GetValue(MapApplication.LayerNameProperty) as string;
MapApplication.Current.ShowWindow("Layer Name", new TextBlock()
{
Text = layerName,
TextWrapping = TextWrapping.Wrap,
Margin = new Thickness(30),
MaxWidth = 480
});
}
protected override void OnDetaching()
{
// Remove the handler from the application's SelectedLayerChanged event.
MapApplication.Current.SelectedLayerChanged -= ShowSelectedLayerName;
}
}