Практические советы: Начало работы

ArcGIS Viewer for Silverlight включает расширяемый интерфейс разработки приложений (API), предоставляющий разработчикам доступ к карте и выбранному слою, методы показа пользовательского интерфейса в диалоговых окнах, а также возможность сохранения и загрузки параметров конфигурации. Расширение 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;
}
Расширенный API предоставляет событие, которое возникает, если выбранный слой меняется, а также методы получения и установки имен слоев. Имена слоев – это способ их идентификации на панели Настроить слои (Configure layers). Они отличаются от идентификаторов слоя тем, что являются интуитивно понятными именами, позволяющими идентифицировать слой пользователям вьюера, в то время как идентификаторы позволяют точно идентифицировать слой в наборе слоев карты с точки зрения кода программы. Событие изменения выбранного слоя доступно через MapApplication.Current.SelectedLayerChanged. Имена слоев могут быть получены и установлены с помощью методов MapApplication.Current.GetLayerName и MapApplication.Current.SetLayerName. Следующий код показывает пример простого поведения, отображающего имя выбранного слоя в окне сообщения при изменении выбранного слоя:

[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;
     }
}

1/23/2014