Практические советы: разработка и отображение диалоговых окон
При разработке и отображении диалоговых окон для вашего картографического приложения нужно учесть массу факторов. Например, решить, какой будет использован пользовательский интерфейс, выбрать общий дизайн и тему, каким образом достичь интеграции с приложением и будут ли использоваться какие-то действия во время и после закрытия диалогового окна, например, удаление слоя из карты.
Отображение пользовательского интерфейса (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. Это сохранит цвета вашего интерфейса, взятые из приложения, и позволит конечным пользователям настраивать их с помощью элементов управления темы.
Доступны следующие виды кистей:
- BackgroundGradientBrush — В наборе компоновок по умолчанию используется в качестве основного цвета фона. Используется в качестве фона диалоговых окон и боковых панелей.
- BackgroundStartGradientStopColorBrush — Ссылается на начальный цвет BackgroundGradientBrush.
- BackgroundEndGradientStopColorBrush — Ссылается на конечный цвет BackgroundGradientBrush.
- BackgroundTextColorBrush — Предназначена для использования для цвета текста, наложенного на кисти фона.
- AccentColorBrush — В стандартном наборе компоновок этот цвет используется для контраста с фоновыми цветами. Этот цвет применяется, например, для границ, полос прокрутки и кнопок.
- AccentTextColorBrush — Предназначена для использовании цвета текста, перекрывающего кисти фона.
- SelectionColorBrush — Предназначена для использования в качестве цветов выбранных элементов. Этот цвет используется, например, для выделения выбранного слоя в содержании карты.
- SelectionOutlineColorBrush — Предназначена для использования вместе с кистью SelectionColorBrush, чтобы отметить выбор. Этот цвет используется, чтобы отметить выбранный слой в содержании карты.
Действия при закрытии диалогового окна
Чтобы начать действие, когда показываемое вашим add-in окно закрывается, используйте обработчик событий onHidingHandler или параметр onHideHandler метода MapApplication.Current.ShowWindow.
- onHidingHandler — Позволяет вам включить логику перед закрытием окна и, если это необходимо, отменить показ окна и завершить операцию. Можно использовать это, например, в случае, когда пользователь закрывает окно во время выполнения операции, и вы хотите спросить его, действительно ли он собирается прервать операцию.
- onHideHandler — Для выполнения логических операций после закрытия окна. Вы можете использовать это, например, для удаления итогового слоя с карты.
