Kartvirkemåter gir deg et middel til å eksponere funksjonalitet i ArcGIS Map-webdelen som alltid skal være aktivert. Hvis du utvikler funksjonalitet for å legge til en egenskap eller endring i Map-webdelen som alltid skal være til stede, bør den være innkapslet som en kartvirkemåte. Kartvirkemåter kan for eksempel brukes til å holde kartet innenfor en viss utstrekning eller gjøre tilgjengelig en meldingstjeneste i JavaScript eller Silverlight.
Virkemåter som er utviklet for bruk med kartwebdelen, må arve fra System.Windows.Interactivity.Behavior<ESRI.ArcGIS.Client.Map>. Behavior<T> base-klassen har flere medlemmer. I en kartwebdelkontekst brukes disse medlemmene som følger:
For å gjøre en virkemåte tilgjengelig så designere kan legge den til kartwebdelen, må du legge til to attributter i virkemåteklassen. Det første er System.ComponentModel.Composition.ExportAttribute, som er inkludert i samlingen System.ComponentModel.Composition som inngår i Microsoft Managed Extensibility Framework (MEF). Dette attributtet informerer kartwebdelen om at virkemåten bør gjøres tilgjengelig. Når du inkluderer det i en virkemåte du implementerer, tar det alltid følgende form: Eksportattributt.[Export(typeof(Behavior<Map>))]
public class MyBehavior : Behavior<Map>
Det andre attributtet som skal legges til, er ESRI.ArcGIS.Client.Extensibility.DisplayNameAttribute. Dette bestemmer navnet på virkemåten slik det vises for en designer som skal legge det til i kartwebdelen. Dette attributtet skal angis som følger:[Export(typeof(Behavior<Map>))]
[DisplayName("<Name to display>")]
public class MyBehavior : Behavior<Map>
Et eksempel på en enkel virkemåte er vist i følgende kode. Virkemåten legger til en behandling i kartets ExtentChanged-hendelse når virkemåten knyttes til kartet, og fjerner den når virkemåten tas bort. Virkemåten viser en meldingsboks med gjeldende utstrekning når utstrekningen endres.
[Export(typeof(Behavior<Map>))]
[DisplayName("Simple Behavior")]
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(sender 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;
}
}