Erstellen von Kartenverhalten
Kartenverhalten bietet die Möglichkeit, Funktionen von ArcGIS Viewer for Silverlight, die immer aktiviert sein sollen, auf einfache Art auf der Oberfläche zu verankern. Kartenverhalten stellt Funktionalität bereit, ohne dass es einer Benutzerinteraktion bedarf. Wenn Sie Logik für den Viewer entwickeln, die immer dann initiiert werden soll, wenn der Viewer geladen wird, dann sollte diese Logik als Verhalten gekapselt werden. Verhalten kann beispielsweise verwendet werden, um eine bestimmte Ausdehnung der Karte beizubehalten.
Weitere Informationen finden Sie unter Empfehlungen: Erste Schritte und Erweitern von ArcGIS Viewer for Silverlight.
Verhalten, das für die Verwendung mit dem Viewer entwickelt wurde, muss Einstellungen von System.Windows.Interactivity.Behavior<ESRI.ArcGIS.Client.Map> übernehmen. Die Basisklasse "Behavior<T>" stellt einige einfache Mitglieder bereit. Beim Viewer werden diese Mitglieder folgendermaßen verwendet:
- AssociatedObject – Eigenschaft, die einen Verweis auf das Objekt bereitstellt, mit dem das Verhalten verknüpft ist. Im Add-In des Viewers ist dies das Kartenobjekt.
- OnAttached – Methode, die aufgerufen wird, wenn das Verhalten mit einem Objekt verknüpft wird. Diese Methode sollte überschrieben werden, um die Initialisierungslogik auszuführen. Beim Viewer tritt diese Methode dann auf, wenn das Verhalten mit der Karte verknüpft wird. Verhalten wird bei Eintritt der folgenden Situationen angehängt:
- Wenn der Viewer geladen wird.
- Wenn ein Benutzer das Verhalten über das Dialogfeld "Verhalten verwalten" hinzufügt oder aktiviert.
- OnDetaching – Methode, die aufgerufen wird, wenn das Verhalten von einem Objekt getrennt wird. Diese Methode sollte überschrieben werden, wenn eine Bereinigungslogik wie das Entfernen von Ereignis-Handlern ausgeführt werden soll. Im Viewer wird diese Methode aufgerufen, wenn ein Benutzer das Verhalten über das Dialogfeld "Kartenverhalten" entfernt oder deaktiviert.
Sie müssen der Verhaltensklasse zwei Attribute hinzufügen, um Application Builder ein Verhalten zur Verfügung zu stellen, das Application Builder hinzugefügt werden kann. Dabei handelt es sich erstens um das Attribut "System.ComponentModel.Composition.ExportAttribute", das in der Assembly System.ComponentModel.Composition im Rahmen des Microsoft Managed Extensibility Framework (MEF) bereitgestellt wird. Dieses Attribut informiert Application Builder darüber, dass das Verhalten zur Verfügung gestellt werden soll. Wenn es für ein Verhalten verwendet werden soll, das Sie implementieren, hat es immer dieses Format:
[Export(typeof(Behavior<Map>))]
public class MyBehavior : Behavior<Map>
Bei dem anderen Attribut, das hinzugefügt werden muss, handelt es sich um das Attribut "ESRI.ArcGIS.Client.Extensibility.DisplayNameAttribute". Hierdurch wird der Name des Verhaltens so festgelegt, wie er dem Designer angezeigt wird, wenn es dem Viewer hinzugefügt wird. Die Attribute "CategoryAttribute" und "DescriptionAttribute" gehören zu den zusätzlichen optionalen Attributen, die über die Assembly "ESRI.ArcGIS.Client.Extensibility" festgelegt werden können. Die Attribute sollten folgendermaßen angegeben werden:
[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>
Nachfolgend finden Sie ein Beispiel für ein einfaches Verhalten. Das Verhalten fügt dem Ereignis "ExtentChanged" der Karte einen Handler hinzu, wenn das Verhalten mit der Karte verknüpft wird, und entfernt es, wenn die Verknüpfung des Verhaltens aufgehoben wird. Das Verhalten zeigt ein Meldungsfeld mit der aktuellen Ausdehnung an, wenn sich die Ausdehnung ändert.
[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;
}
}