Création d'un comportement de la carte
Les comportements de la carte permettent de facilement faire apparaître les fonctions dans ArcGIS Viewer for Silverlight qui doivent rester activées en permanence. Les comportements de la carte offrent des fonctions qui ne requièrent pas l'interaction de l'utilisateur. Si vous développez une certaine logique qui doit toujours être initiée à chaque chargement de la visionneuse, la logique doit alors être intégrée en tant que comportement. Les comportements peuvent être utilisés, par exemple, pour conserver une certaine étendue de la carte.
Reportez-vous à la rubrique Pratiques conseillées : démarrage et Extension d'ArcGIS Viewer for Silverlight pour plus d'informations.
Les comportements qui sont développés pour être utilisés avec la visionneuse doivent hériter de System.Windows.Interactivity.Behavior<ESRI.ArcGIS.Client.Map>. La classe de base Behavior<T> fournit quelques membres simples. Dans le contexte de la visionneuse, ces membres peuvent être compris comme suit :
- AssociatedObject : propriété qui fournit une référence à l'objet auquel le comportement est associé. Dans votre complément de visionneuse, il s'agit de l'objet de carte.
- OnAttached : méthode qui est appelée lorsque le comportement est associé à un objet. Remplacez cette méthode pour réaliser une logique d'initialisation. Dans la visionneuse, cette méthode se produit lorsque le comportement est associé à la carte. Les comportements sont associés dans l'un des cas suivants :
- lorsque la visionneuse est chargée ;
- lorsqu'un utilisateur ajoute ou active le comportement via la boîte de dialogue Gérer les comportements.
- OnDetaching : méthode qui est appelée lorsque le comportement est dissocié d'un objet. Remplacez cette méthode pour réaliser une logique de nettoyage, telle que la suppression des gestionnaires d'événements. Dans le contexte de la visionneuse, cette méthode est appelée lorsqu'un utilisateur supprime ou désactive le comportement via la boîte de dialogue Comportements de la carte.
Pour qu'un comportement puisse être ajouté à Application Builder, vous devez ajouter deux attributs à la classe de votre comportement. Le premier est System.ComponentModel.Composition.ExportAttribute, qui est inclus dans l'assembly System.ComponentModel.Composition dans le cadre du Managed Extensibility Framework (MEF) de Microsoft. Cet attribut informe Application Builder que le comportement doit être disponible. Lorsque vous l'incluez dans un comportement que vous implémentez, il prend toujours la forme suivante :
[Export(typeof(Behavior<Map>))]
public class MyBehavior : Behavior<Map>
L'autre attribut qui doit être ajouté est ESRI.ArcGIS.Client.Extensibility.DisplayNameAttribute. Il détermine le nom du comportement, tel qu'il apparaît à un concepteur lorsqu'il l'ajoute à la visionneuse. Parmi les autres attributs facultatifs que vous pouvez spécifier à partir de l'assembly ESRI.ArcGIS.Client.Extensibility figurent CategoryAttribute et DescriptionAttribute. Les attributs doivent être spécifiés comme suit :
[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>
Vous trouverez ci-dessous un exemple de comportement simple. Le comportement ajoute un gestionnaire à l'événement ExtentChanged de la carte lorsqu'il est associé à la carte et le supprime lorsqu'il est dissocié. Le comportement affiche un message indiquant l'étendue courante lorsqu'elle change.
[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;
}
}