Gode rutiner: Designe og vise dialogbokser

Når du designer og viser dialogbokser i kartprogrammet ditt, er det mange faktorer du må ta hensyn til, for eksempel hvordan brukergrensesnittet (UI) skal se ut, den generelle designen og temaet, hvordan du kan oppnå en problemfri integrasjon med det eksisterende programrammeverket, og om det er handlinger du ønsker skal utføres når dialogboksen lukkes eller har blitt lukket, for eksempel fjerne et lag fra kartet.

Vise UI-et

Når du skal vise UI-et (dialogboksen) i Map-webdelen, gir API-et (Application Programming Interface) for utvidbarhet deg to metoder: ShowWindow og HideWindow. Disse metodene er tilgjengelige fra MapApplication.Current. Metoden MapApplication.Current.ShowWindow viser et FrameworkElement i en flytende dialogboks. Send objektet du ønsker skal vises, sammen med tittelen på dialogboksen, som en streng til ShowWindow-metoden for å vise en dialogboks. ShowWindow-metoden godtar alternativt en boolsk operator for å fastsette hvorvidt dialogboksen er modal (sperrende), en hendelsesbehandling som kalles opp når dialogboksen har begynt å lukke seg, og en hendelsesbehandling til som kalles opp når dialogboksen har lukket seg. Send samme FrameworkElement til MapApplication.Current.HideWindow-metoden for å lukke dialogboksen.

Hvis du implementerer en kommando, gjør du slik at UI-et vises like etter at det klikkes på knappen (det vil si etter at kommandoen er utført). Hvis kommandoen krever at brukeren gjør noe på kartet, bør dette indikeres gjennom UI-et.

Når du bruker ShowWindow, setter du bakgrunnen av UI-et til å være gjennomsiktig. Dialogboksen med UI-et baserer bakgrunnsfargen på programmets temafarger, som kan konfigureres av brukere som designer programmet.

For å nevne et eksempel med visning av Silverlight-UI-et i ArcGIS Map-webdelen: La oss si at du har implementert UserControl med standardklassen med bakenforliggende kode og XAML (Extensible Application Markup Language) som følger:

<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>

Et verktøy som viser denne kontrollen i en dialogboks når verktøyet kjøres, ville blitt implementert på denne måten:

[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;
}

I en Map-webdel med standardtemaet vises denne dialogboksen som følger:

Standard dialogboks

Tilpasning av oppsett

Bruk tilpasning av oppsett for å legge til UI (for eksempel paneler) i programmet som du ikke vil skal vises i en flytende dialogboks. Hvis UI-et alltid skal være synlig, tar du det med i oppsettet. Hvis du vil gi brukeren muligheten til å slå UI-et på og av, kan du gjøre følgende:

  • Ta med en lukkeknapp eller et lignende element i UI-et som setter Visibility-egenskapen til Collapsed.
  • Lag et verktøy (det vil si implementer ICommand) som finner kontrollen ved å bruke MapApplication.Current.FindControlInLayout og deretter setter Visibility-egenskapen til Visible.

Du må ikke traversere det visuelle treet programmatisk for å legge til elementer i programmet dynamisk. Dette krever nemlig at det visuelle treet er strukturert på en bestemt måte, og er derfor i seg selv skjørt. Kode som gjør dette, kan blir ødelagt fra oppsett til oppsett og utgivelse til utgivelse.

Pensler

Extensibility-settet inneholder et sett med pensler som brukes med ArcGIS Map-webdelen. Bruk de innebygde penslene til å sette farge på UI-et. Dette gjør at du får samme farger på UI-et som i programmet og gjør at sluttbrukeren kan konfigurere dem gjennom temakontrollene.

Følgende pensler er tilgjengelig:

  • BackgroundGradientBrush – Denne brukes som hovedbakgrunnsfarge i standardsettet med oppsett. Denne brukes som bakgrunn for dialogbokser og sidepanelet.
  • BackgroundStartGradientStopColorBrush – Refererer til startfargen for BackgroundGradientBrush.
  • BackgroundEndGradientStopColorBrush – Refererer til sluttfargen for BackgroundGradientBrush.
  • BackgroundTextColorBrush – Ment å skulle brukes for fargen på tekst som overlapper bakgrunnspenslene.
  • AccentColorBrush – I standardsettet med oppsett brukes denne fargen til å gi kontrast til bakgrunnsfargene, for eksempel på rammer, rullefelter og knapper.
  • AccentTextColorBrush – Ment å skulle brukes for fargen på tekst som overlapper bakgrunnspenslene.
  • SelectionColorBrush – Dette er ment å skulle brukes som fargen på valgte elementer, for eksempel til å utheve det valgte laget i Kartinnhold.
  • SelectionOutlineColorBrush – Ment å skulle brukes sammen med SelectionColorBrush for å gi omriss på utvalg. Denne fargen brukes til å gi omriss på det valgte laget i Kartinnhold.

Handlinger ved lukking av dialogboksen

For å igangsette en handling når et vindu som vises av tilleggsprogrammet, lukkes, sender du en hendelsesbehandling til parameteren onHidingHandler eller onHideHandler i MapApplication.Current.ShowWindow-metoden.

  • onHidingHandler – Gjør at du kan utføre logikk før vinduet har lukket seg og eventuelt avbryte operasjonen med vinduslukking. Du kan for eksempel bruke dette hvis brukeren lukker vinduet under en operasjon og du vil at brukeren skal få opp et spørsmål om han eller hun ønsker å stoppe operasjonen.
  • onHideHandler – for å utføre logikk etter at vinduet har lukket seg. Du kan for eksempel bruke dette til å fjerne et resultatlag fra kartet.