Создание поведения карты
Поведения карты являются простейшим способом обеспечения функционирования поверхности в ArcGIS Viewer for Silverlight, который всегда должен быть включен. Поведения карты обеспечивают работы некоторых функций без участия пользователя. Если вы разрабатываете логику для Viewer, которая всегда должна работать при загрузке Viewer, эта логика должна быть оформлена как поведение. Поведения можно использовать, например, для сохранения определенного экстента карты.
Дополнительные сведения смотрите в разделе Практические советы: Начало работы и Расширение возможностей ArcGIS Viewer for Silverlight.
Поведения, которые разработаны для использования с Viewer, наследуются из System.Windows.Interactivity.Behavior<ESRI.ArcGIS.Client.Map>. Базовый класс Behavior<T> содержит несколько простых элементов. В контексте Viewer, эти элементы могут использоваться так:
- AssociatedObject — свойство, которое содержит ссылку на объект, к которому применяется поведение. В Viewer это будет объект карты.
- OnAttached — метод, который используется при присоединении поведения к объекту. Для выполнения логики инициализации этот метод должен быть замещен. В Viewer этот метод применяется при присоединении поведения к карте. Поведения присоединяются при наступлении одного из следующих событий:
- При загрузке Viewer.
- Когда пользователь добавляет или включает поведение через диалоговое окно Управление поведением.
- OnDetaching — метод, который используется при отсоединении поведения от объекта. Для очистки логики, например, для удаления обработчиков событий, этот метод должен быть замещен. В Viewer, этот метод включается, когда пользователь удаляет или отключает поведение через диалоговое окно Поведения карты.
Чтобы сделать поведение доступным для добавления в Конструктор приложения, необходимо добавить два атрибута в класс поведения. Первый —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. Он определяет имя поведения, как оно отображается для разработчика при добавлении в Viewer. Другие дополнительные атрибуты, которые можно задать из сборки 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;
}
}