Empfehlungen: Entwerfen und Anzeigen von Dialogfeldern
Beim Entwerfen und Anzeigen von Dialogfeldern in der Kartenanwendung muss u. a. Folgendes berücksichtigt werden: wie die Benutzeroberfläche angezeigt werden soll, das Gesamtdesign, wie eine problemlose Integration in das vorhandene Anwendungs-Framework erzielt werden kann und ob beim Schließen oder nach dem Schließen des Dialogfeldes Aktionen, wie beispielsweise das Entfernen eines Layers aus der Karte, ausgeführt werden sollen.
Anzeigen der Benutzeroberfläche
Die Erweiterbarkeits-API (Application Programming Interface) stellt zwei Methoden zum Anzeigen der Benutzeroberfläche (Dialogfeld) im Viewer bereit – ShowWindow und HideWindow. Diese Methoden werden von MapApplication.Current zur Verfügung gestellt. Die Methode "MapApplication.Current.ShowWindow" zeigt jedes FrameworkElement in einem unverankerten Dialogfenster an. Übergeben Sie dazu einfach das anzuzeigende Objekt mit dem Titel des Dialogfelds an die Methode. Neben dem Inhalt und Titel des Dialogfelds akzeptiert die ShowWindow-Methode die folgenden optionalen Argumente:
- isModal – ein boolescher Wert, um festzulegen, ob das Dialogfeld modal ist. Dies ist standardmäßig nicht der Fall.
- onHidingHandler – ein Ereignishandler, der aufgerufen wird, wenn der Schließvorgang des Dialogfelds gestartet wurde
- onHideHandler – ein Ereignishandler, der aufgerufen wird, wenn der Schließvorgang des Dialogfelds abgeschlossen ist
- windowType - ein Aufzählungswert, der festlegt, ob das Fenster mit den Farben der Entwurfszeitumgebung (d. h. Application Builder) oder der Laufzeitumgebung (d. h. Viewer) angezeigt werden soll
- top – ein Double-Wert, der auf Null festgelegt werden kann und den Versatz des Fensters von oben in der Anwendung in Pixel festlegt Erfolgt keine Angabe, wird das Fenster vertikal zentriert.
- left – ein Double-Wert, der auf Null festgelegt werden kann und den Versatz des Fensters von der linken Seite der Anwendung in Pixel angibt Erfolgt keine Angabe, wird das Fenster horizontal zentriert.
Die ShowWindow-Methode gibt außerdem einen Verweis auf das angezeigte FloatingWindow zurück. Obwohl die Signatur der ShowWindow-Methode einen Rückgabeobjekttyp angibt, handelt es sich in Viewer und Application Builder zuverlässig um eine FloatingWindow-Instanz.
Wenn Sie einen Befehl implementieren, zeigen Sie die Benutzeroberfläche an, sobald auf die Schaltfläche geklickt wird (d. h. der Befehl wird ausgeführt). Wenn der Befehl die Interaktion des Benutzers mit der Karte erfordert, sollte die Benutzeroberfläche darauf hinweisen.
Wenn Sie "ShowWindow" verwenden, müssen Sie den Hintergrund der Benutzeroberfläche als transparent festlegen. Der Hintergrund des Dialogfeldes, das die Benutzeroberfläche enthält, basiert auf den Designfarben der Anwendung, die wiederum von Benutzern konfiguriert werden können, die die Anwendung entwerfen.
Ein Beispiel für die Anzeige der Benutzeroberfläche von Silverlight im Viewer wäre beispielsweise die folgende Implementierung der UserControl mit der Standard-CodeBehind-Klasse und der XAML (Extensible Application Markup Language):
<UserControl x:Class="MyExtension.SimpleDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="Transparent">
<TextBlock Text="This is my Silverlight UI!" Margin="20" />
</Grid>
</UserControl>
Ein Werkzeug, das dieses Steuerelement in einem Dialogfeld anzeigt, wenn das Werkzeug ausgeführt wird, würde folgendermaßen implementiert:
[Export(typeof(ICommand))]
[DisplayName("Show A Simple Dialog")]
[Category("My Tools")]
[Description("Tool to show a simple dialog")]
[DefaultIcon("<Insert path to icon>")]
public class ShowDialogCommand : ICommand
{
private SimpleDialog dialog = null;
public void Execute(object parameter)
{
// Instantiate a new dialog if one does not already exist.
dialog = dialog ?? new SimpleDialog();
// Display the dialog.
MapApplication.Current.ShowWindow("Simple Dialog", dialog);
}
public bool CanExecute(object parameter)
{
// Return true so that the command is always enabled.
return true;
}
public event EventHandler CanExecuteChanged;
}
In einem Viewer, der das Standarddesign aufweist, wird dieses Dialogfeld folgendermaßen angezeigt:
Layout-Anpassung
Verwenden Sie die Layout-Anpassung, um der Anwendung eine Benutzeroberfläche (z. B. Fenster) hinzuzufügen, die nicht in einem unverankerten Dialogfenster angezeigt werden soll. Wenn die Benutzeroberfläche immer sichtbar sein soll, binden Sie sie in das Layout ein. Um dem Benutzer das Ein- und Ausschalten der Benutzeroberfläche zu ermöglichen, können Sie folgende Schritte ausführen:
- Binden Sie beispielsweise eine Schließschaltfläche in die Benutzeroberfläche ein, die die Eigenschaft "Sichtbarkeit" auf "Ausgeblendet" festlegt.
- Erstellen Sie ein Werkzeug (d. h. implementieren Sie "ICommand"), das das Steuerelement mit "MapApplication.Current.FindControlInLayout" findet und dann dessen Sichtbarkeitseigenschaft auf "Sichtbar" festlegt.
Da Layouts die Benutzeroberfläche nicht unbedingt einbinden, müssen Sie sicherstellen, dass Sie Situationen handhaben können, in denen "FindControlInLayout" den Wert NULL zurückgibt.
Gehen Sie nicht programmatisch durch die visuelle Struktur, um der Anwendung Elemente dynamisch hinzuzufügen. Dieser Ansatz erfordert einen besonderen Aufbau der visuellen Struktur und ist demnach brüchig. Code, der sich so verhält, kann von Layout zu Layout und von Version zu Version beschädigt werden.
Weitere Informationen finden Sie unter Erstellen eines benutzerdefinierten Layouts und in den Beispielen des Abschnitts "Steuerelemente" der interaktiven Beispielen von ArcGIS Viewer for Silverlight.
Pinsel
Die Assembly für die Erweiterbarkeit beinhaltet mehrere Pinsel, die im Viewer und in Application Builder verwendet werden. Verwenden Sie die integrierten Pinsel, um Ihrer Benutzeroberfläche Farbe zu verleihen. Dadurch stimmen die Farben Ihrer Benutzeroberfläche mit denen der Anwendung überein und Endbenutzer können sie über diese Designsteuerelemente konfigurieren.
Die folgenden Pinsel stehen zur Verfügung:
Viewer-Pinsel
- BackgroundGradientBrush – die primäre Hintergrundfarbe für Benutzeroberflächenelemente im Viewer. Er dient als Hintergrund für Dialogfelder und die Seitenleiste.
- BackgroundStartGradientStopColorBrush – die Startfarbe des BackgroundGradientBrush.
- BackgroundEndGradientStopColorBrush – die Endfarbe des BackgroundGradientBrush.
- BackgroundTextColorBrush – die primäre Textfarbe für Benutzeroberflächenelemente im Viewer. Sollte auf Text angewendet werden, der Elemente überlagert, die BackgroundGradientBrush für die Hintergrundfarbe oder Füllung verwenden.
- AccentColorBrush – legt eine Farbe als Kontrast zu BackgroundGradientBrush fest, die sich jedoch von der Textfarbe unterscheidet. Diese Farbe wird beispielsweise für Rahmen, Bildlaufleisten und Schaltflächen verwendet.
- AccentTextColorBrush – legt eine Farbe für Text im Viewer fest, der Elemente überlagert, die AccentColorBrush für die Hintergrundfarbe oder Füllung verwenden.
- SelectionColorBrush – Wird als Farbe ausgewählter Elemente verwendet. Diese Farbe wird beispielsweise verwendet, um die ausgewählten Layer im Karteninhalt hervorzuheben.
- SelectionOutlineColorBrush – Wird gemeinsam mit dem "SelectionColorBrush" als Umriss für eine Auswahl verwendet. Diese Farbe wird beispielsweise als Umriss für den ausgewählten Layer im Karteninhalt verwendet.
Application Builder-Pinsel
- DesignHostBackgroundBrush – die primäre Hintergrundfarbe für Benutzeroberflächenelemente von Application Builder.
- DesignHostBackgroundTextBrush – die primäre Textfarbe für Benutzeroberflächenelemente von Application Builder. Sollte auf Text angewendet werden, der Elemente überlagert, die DesignHostBackgroundBrush für die Hintergrundfarbe oder Füllung verwenden.
- DesignHostAccentBrush – eine Farbe, die als Kontrast zur Hintergrundfarbe von Application Builder verwendet wird, sich jedoch von der Textfarbe unterscheidet.
- DesignHostAccentTextBrush – die Farbe für Text in Application Builder, der Elemente überlagert, die DesignHostAccentBrush für die Hintergrundfarbe oder Füllung verwenden.
Aktionen beim Schließen des Dialogfeldes
Um eine Aktion zu initiieren, wenn ein vom Add-In angezeigtes Fenster geschlossen wird, übergeben Sie einen Ereignishandler an den Parameter "onHidingHandler" und/oder "onHideHandler" der Methode "MapApplication.Current.ShowWindow".
- onHidingHandler – Ermöglicht die Ausführung von Logik, bevor das Fenster geschlossen wird und bricht den Schließvorgang ggf. ab. Sie können diesen Parameter beispielsweise verwenden, wenn der Benutzer das Fenster während eines Vorgangs schließt und Sie den Benutzer auffordern möchten, anzugeben, ob der Vorgang abgebrochen werden soll oder nicht.
- onHideHandler – Zum Ausführen von Logik, nachdem das Fenster geschlossen wurde. Sie können diesen Parameter beispielsweise verwenden, um einen Ergebnis-Layer aus der Karte zu entfernen.