Практические советы: разработка и отображение диалоговых окон

При разработке и отображении диалоговых окон для вашего картографического приложения нужно учесть массу факторов. Например, решить, какой будет использован пользовательский интерфейс, выбрать общий дизайн и тему, каким образом достичь интеграции с приложением и будут ли использоваться какие-то действия во время и после закрытия диалогового окна, например, удаление слоя из карты.

Отображение пользовательского интерфейса (UI)

Чтобы отобразить пользовательский интерфейс UI (диалоговое окно) во Вьюере (Viewer), расширенный интерфейс разработки приложений (API) содержит два метода: Показать окно (ShowWindow) и Скрыть окно (HideWindow). Эти методы доступны в MapApplication.Current. Метод MapApplication.Current.ShowWindow отображает все элементы FrameworkElement в "плавающем" диалоговом окне. Объект, который вы хотите отобразить, передается с названием диалогового окна в виде строки в метод ShowWindow для отображения диалогового окна. Метод ShowWindow дополнительно поддерживает значение Boolean для определения, является ли диалоговое окно модальным, будет ли вызываться обработчик событий во время закрытия диалогового окна, а также второй обработчик – после его закрытия. Для закрытия диалогового окна передайте тот же элемент FrameworkElement в метод MapApplication.Current.HideWindow.

При использовании команды отобразите интерфейс, как только будет нажата кнопка (т.е., когда команда запущена). Если ваша команда требует взаимодействия пользователя с картой, интерфейс должен это отобразить.

При использовании метода ShowWindow сделайте фон вашего интерфейса прозрачным. Диалоговое окно, содержащее ваш интерфейс UI, будет иметь свой цвет фона – на основе цветов темы приложения, которые, в свою очередь, настраиваются пользователями, разрабатывающими приложение.

Для примера отображения пользовательского интерфейса Silverlight вьюера представьте, что вы разработали элемент управления UserControl с классом кода и текстом Extensible Application Markup Language (XAML), как показано ниже:

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

Инструмент, отображающий этот элемент диалогового окна при запуске, будет использован следующим образом:

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

Во вьюере, имеющем тему, заданную по умолчанию, диалог выглядит следующим образом:

Стандартный диалог вьюера

Настройка компоновки

Используйте настройку компоновки, чтобы добавить пользовательский интерфейс (к примеру, панели) к приложению, которое вы не планируете отображать в "плавающем" диалоговом окне. Если интерфейс должен быть всегда видимым, добавьте его к компоновке. Чтобы дать пользователю возможность включать и выключать пользовательский интерфейс (UI), вы можете:

  • Включить кнопку закрытия или что-то подобное, что позволит вам установить свойство видимости (Visibility) выключенным.
  • Создать инструмент (например, добавить ICommand), который найдет элемент управления с помощью MapApplication.Current.FindControlInLayout, а затем установит значение свойства видимости (Visibility) равным Видимый (Visible).
ПримечаниеПримечание:

Поскольку компоновки не обязательно включают ваш UI, убедитесь в осуществлении обработки ситуации, когда FindControlInLayout возвратит null.

Не следует программно передвигаться по визуальному дереву для динамического добавления элементов в приложение. Это подход требует специального структурирования визуального дерева и поэтому является ненадежным. Код, проделывающий эти действия, может в некоторых компоновках и релизах не работать.

Подробнее см. раздел Создание пользовательской компоновки, а также примеры раздела Элементы управления ArcGIS Viewer for Silverlight (интерактивные примеры).

Кисти

Расширенная сборка включает в себя набор кистей, использующихся во вьюера. Используйте встроенные кисти, чтобы раскрасить ваш интерфейс UI. Это сохранит цвета вашего интерфейса, взятые из приложения, и позволит конечным пользователям настраивать их с помощью элементов управления темы.

Доступны следующие виды кистей:

Действия при закрытии диалогового окна

Чтобы начать действие, когда показываемое вашим add-in окно закрывается, используйте обработчик событий onHidingHandler или параметр onHideHandler метода MapApplication.Current.ShowWindow.

6/8/2012