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

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;
}
Расширенный 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;
     }
}

6/8/2012