Mejores prácticas: Introducción
ArcGIS Viewer for Silverlight incluye una interfaz de programación de aplicaciones (API) de extensibilidad que permite a los desarrolladores acceso a los mapas y capas seleccionados, así como a métodos para mostrar la interfaz de usuario (UI) en los cuadros de diálogo y la capacidad de guardar y cargar datos de configuración. La API de extensibilidad se incluye en ArcGIS Extensibility SKD for Silverlight. Para comenzar, determine primero si va a crear una herramienta o un comportamiento. Una vez que haya decidido sobre el tipo de add-in a crear, consulte la siguiente sección sobre Trabajar con el mapa y capa seleccionada para obtener información detallada sobre cómo acceder al mapa desde su add-in.
Herramientas y comportamientos
Las herramientas proporcionan una manera simple de mostrar la lógica que debería iniciar el usuario. Si tiene sentido que la funcionalidad que está implementando se inicie al hacer que un usuario haga clic en un botón en la barra de herramientas, entonces debe recopilar esta funcionalidad en una herramienta. Una herramienta de identificación es un ejemplo de una situación en la que proporcionaría un botón en la barra de herramientas para el usuario.
Los comportamientos de mapa proporcionan una manera simple de mostrar la funcionalidad que siempre debe estar habilitada. Los comportamientos de mapa proporcionan funcionalidad sin la necesidad de la interacción del usuario. Si está desarrollando una funcionalidad para añadir una capacidad o modificación que debe estar siempre presente, entonces debe recopilarla como un comportamiento de mapa. Los comportamientos de mapa se pueden utilizar, por ejemplo, para restringir la extensión de mapa, mostrar las coordenadas del ratón sobre el puntero del ratón, o mostrar un cuadro de diálogo introductorio cuando se carga la aplicación.
Para obtener más información y ejemplos, consulte Crear una herramienta y Crear un comportamiento de mapa.
Trabajar con el mapa y la capa seleccionada
Se puede acceder al mapa y a la capa seleccionada a través de las propiedades en el objeto estático ESRI.ArcGIS.Client.Extensibility.MapApplication. El objeto MapApplication está disponible a través de la propiedad MapApplication.Current. Para acceder al objeto del mapa, utilice MapApplication.Current.Map en el código del add-in. Para acceder a la capa seleccionada, utilice MapApplication.Current.SelectedLayer. El código del comando simple del tema Crear una herramienta demuestra cómo acceder al mapa en el método CanExecute. El siguiente código muestra un ejemplo de un comando simple donde se muestra la Id. de la capa seleccionada cuando se ejecuta la herramienta y la lógica en el método CanExecute es tal que la herramienta se habilita solamente si se selecciona GraphicsLayer.
[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;
}
[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;
}
}