Создание поведения карты

Поведения карты предоставляют простой путь для обеспечения активной функциональности ArcGIS Viewer for Silverlight. Поведения карты обеспечивают работу некоторых функций без участия пользователя. Если вы разрабатываете логику для вьюера, которая всегда должна работать при загрузке вьюера, эта логика должна быть оформлена как поведение. Поведения можно использовать, например, для сохранения определенного экстента карты.

Дополнительные сведения смотрите в разделе Практические советы: Начало работы и Расширение возможностей ArcGIS Viewer for Silverlight.

Поведения, которые разработаны для использования с вьюером, наследуются из System.Windows.Interactivity.Behavior<ESRI.ArcGIS.Client.Map>. Базовый класс Behavior<T> содержит несколько простых элементов. В контексте вьюера, эти элементы могут использоваться так:

Чтобы сделать поведение доступным для добавления в Конструктор приложений, необходимо добавить два атрибута в класс поведения. Первый –System.ComponentModel.Composition.ExportAttribute, который входит в сборку System.ComponentModel.Composition, поставляемую Microsoft как часть Managed Extensibility Framework (MEF). Этот атрибут сообщает Конструктору приложений, что поведение должно стать доступным. Когда вы включаете его в используемое поведение, он всегда принимает следующую форму:

[Export(typeof(Behavior<Map>))]
public class MyBehavior : Behavior<Map>

Второй необходимый атрибут – это ESRI.ArcGIS.Client.Extensibility.DisplayNameAttribute. Он определяет имя поведения, как оно отображается для разработчика при добавлении во вьюер. Другие дополнительные атрибуты, которые можно задать из сборки ESRI.ArcGIS.Client.Extensibility, включают CategoryAttribute и DescriptionAttribute. Эти атрибуты должны быть заданы следующим образом:

[Export(typeof(Behavior<Map>))]
[DisplayName("Show Current Extent")]
[Category("My Behaviors")]
[Description("Shows a message box with the current extent when the extent changes")]
public class MyBehavior : Behavior<Map>

Пример простого поведения показан ниже. Поведение добавляет обработчик к событию карты ExtentChanged при подсоединении к карте, и удаляет его при отключении. При изменении экстента, поведение отображает окно сообщения с параметрами текущего экстента.

[Export(typeof(Behavior<Map>))]
[DisplayName("Simple Behavior")]
[Category("My Behaviors")]
[Description("Shows a message box with the current extent when the extent changes")]
public class MyBehavior : Behavior<Map>
{
     protected override void OnAttached()
     {
          base.OnAttached();
 
          // Add a handler to the map's ExtentChanged event.
          this.AssociatedObject.ExtentChanged += OnExtentChanged;
     }
 
     private void OnExtentChanged(object s, ExtentEventArgs args)
     {
          // Show a message box with the new extent.
          MessageBox.Show(this.AssociatedObject.Extent.ToString());
     }
 
     protected override void OnDetaching()
     {
          // Remove the handler from the map's ExtentChanged event.
          this.AssociatedObject.ExtentChanged -= OnExtentChanged;
     }
}
1/23/2014