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

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

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

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

Метод ShowWindow также возвращает ссылку на отображаемое FloatingWindow. Хотя сигнатура метода ShowWindow обозначает возвращенный тип объекта, во Viewer и Application Builder это будет экземпляр FloatingWindow.

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

При использовании метода 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).
ПримечаниеПримечание:

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

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

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

Кисти

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

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

Кисти вьюера

Кисти Application Builder

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

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

1/23/2014