Crear un comportamiento de mapa
Los comportamientos de mapa ofrecen un método sencillo de acceder a la funcionalidad de ArcGIS Viewer for Silverlight que siempre debería estar habilitada. Los comportamientos de mapa proporcionan funcionalidad sin la necesidad de la interacción del usuario. Si está desarrollando lógica para el visor que siempre debería ser iniciada cuando se carga el Visor, entonces la lógica debería ser abordada como un comportamiento. Los comportamientos se pueden utilizar, por ejemplo, para mantener el mapa en cierta extensión.
Consulte más información en Mejores prácticas: Introducción y en Extender ArcGIS Viewer for Silverlight.
Los comportamientos que se desarrollan para utilizar con el Visor deben heredarse de System.Windows.Interactivity.Behavior<ESRI.ArcGIS.Client.Map>. La clase base Comportamiento<T> proporciona algunos miembros simples. En el contexto del Visor, estos miembros pueden entenderse como sigue:
- AssociatedObject: propiedad que proporciona una referencia del objeto al que se adjunta el comportamiento. En el add-in del Visor, este será el objeto de mapa.
- OnAttached: método que se invoca cuando el comportamiento se adjunta a un objeto. Puede invalidar este método para realizar la lógica de inicialización. En el Visor, este método se produce cuando el comportamiento se asocia al mapa. Los comportamientos se asocian al momento que ocurra uno de los siguientes eventos:
- Cuando el visor está cargando.
- Cuando un usuario agrega o permite el comportamiento a través del cuadro de diálogo Administrar comportamientos.
- OnDetaching: método que se invoca cuando el comportamiento se desasocia de un objeto. Puede invalidar este método para realizar una lógica de limpieza como, por ejemplo, quitar los controladores de eventos. En el Visor, este método se invoca cuando un usuario quita o deshabilita el comportamiento a través del cuadro de diálogo Comportamientos del mapa.
Para hacer que un comportamiento esté disponible para agregarlo al Application Builder, debe agregar dos atributos a la clase de comportamiento. La primera es System.ComponentModel.Composición.ExportAttribute, que se incluye en el ensamblado System.ComponentModel.Composición que se proporciona como parte del Marco de extensibilidad administrado (MEF). Este atributo informa al Application Builder que el comportamiento debería estar disponible. Cuando lo incluye en un comportamiento que implementa, este siempre adoptará la siguiente forma:
[Export(typeof(Behavior<Map>))]
public class MyBehavior : Behavior<Map>
El otro atributo requerido para agregar es ESRI.ArcGIS.Client.Extensibility.DisplayNameAttribute. Esto determina el nombre del comportamiento como le aparece al diseñador al agregarlo al Visor. Los atributos adicionales opcionales que puede especificar desde el ensamblado ESRI.ArcGIS.Client.Extensibility incluyen CategoryAttribute y DescriptionAttribute. Los atributos se deben especificar como sigue:
[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>
Un ejemplo de un comportamiento simple se muestra a continuación. El comportamiento agrega un controlador al evento ExtentChanged del mapa cuando se adjunta el comportamiento al mapa y se quita cuando se desasocia. El comportamiento muestra un cuadro de mensaje con la extensión actual cuando se cambia la extensión.
[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;
}
}