Empfehlungen: Erste Schritte
ArcGIS Viewer for Silverlight beinhaltet eine Extensibility API (Application Programming Interface), die Entwicklern den Zugriff auf die Karte und ausgewählte Layer sowie auf Methoden zum Anzeigen der Benutzeroberfläche in Dialogfeldern ermöglicht. Darüber hinaus bietet sie die Möglichkeit, Konfigurationsdaten zu speichern und zu laden. Die Extensibility API ist in ArcGIS Extensbility SDK for Silverlight enthalten. Zunächst legen Sie fest, ob Sie ein Werkzeug oder ein Verhalten erstellen. Nachdem Sie den Typ des zu erstellenden Add-Ins ausgewählt haben, finden Sie im folgenden Abschnitt zum Arbeiten mit der Karte und dem ausgewählten Layer weitere Informationen dazu, wie Sie vom Add-In auf die Karte zugreifen.
Werkzeuge und Verhalten
Mit Werkzeugen kann vom Benutzer zu initiierende Logik auf einfache Weise auf der Oberfläche verankert werden. Wenn die Funktionalität, die Sie implementieren, durch Klicken auf eine Schaltfläche auf der Werkzeugleiste vom Benutzer initiiert werden soll, sollte diese Funktionalität in ein Werkzeug gekapselt werden. Ein Identifizierungswerkzeug ist ein Beispiel für die Bereitstellung einer Schaltfläche auf der Werkzeugleiste des Benutzers.
Kartenverhalten bieten die Möglichkeit, Funktionalität, die immer aktiviert sein soll, auf einfache Art auf der Oberfläche zu verankern. Kartenverhalten stellen Funktionalität bereit, ohne dass es einer Benutzerinteraktion bedarf. Wenn Sie Funktionalität entwickeln, um eine Funktion oder Änderung hinzuzufügen, die stets vorhanden sein soll, dann sollte diese als Kartenverhalten gekapselt werden. Kartenverhalten kann beispielsweise verwendet werden, um die Kartenausdehnung einzuschränken, um Mauskoordinaten auf dem Mauszeiger anzuzeigen oder um ein Einführungs-Dialogfeld beim Laden der Anwendung anzuzeigen.
Weitere Informationen und Beispiele finden Sie unter Erstellen eines Werkzeugs und Erstellen eines Kartenverhaltens.
Arbeiten mit der Karte und mit dem ausgewählten Layer
Der Zugriff auf die Karte und den ausgewählten Layer erfolgt über die Eigenschaften des statischen Objekts "ESRI.ArcGIS.Client.Extensibility.MapApplication". Das Objekt "MapApplication" ist über die Eigenschaft "MapApplication.Current" verfügbar. Verwenden Sie "MapApplication.Current.Map" im Add-In-Code, um auf das Kartenobjekt zuzugreifen. Verwenden Sie "MapApplication.Current.SelectedLayer", um auf den ausgewählten Layer zuzugreifen. Der Code für den einfachen Befehl im Thema Erstellen eines Werkzeugs veranschaulicht den Zugriff auf die Karte mit der Methode "CanExecute". Der folgende Code ist ein Beispiel für einen einfachen Befehl, bei dem die ID des ausgewählten Layers angezeigt wird, wenn das Werkzeug ausgeführt wird, und die Logik der Methode "CanExecute" so festgelegt ist, dass das Werkzeug nur dann aktiviert wird, wenn ein GraphicsLayer ausgewählt wird.
[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;
}
}