Практические советы: разработка и отображение диалоговых окон
При разработке и отображении диалоговых окон для вашего картографического приложения нужно учесть массу факторов. Например, решить, какой будет использован пользовательский интерфейс, выбрать общий дизайн и тему, каким образом достичь интеграции с приложением и будут ли использоваться какие-то действия во время и после закрытия диалогового окна, например, удаление слоя из карты.
Отображение пользовательского интерфейса
Чтобы отобразить пользовательский интерфейс (диалоговое окно) во вьюере, расширенный интерфейс разработки приложений (API) предлагает два метода – ShowWindow и HideWindow. Эти методы доступны в MapApplication.Current. Метод MapApplication.Current.ShowWindow отображает все элементы FrameworkElement в "плавающем" диалоговом окне. Для этого просто передайте в метод объект, который вы хотите отобразить, вместе с названием диалогового окна. Кроме заголовка и содержания диалогового окна, метод ShowWindow использует следующие дополнительные аргументы:
- isModal – Булево значение, определяющее, является ли диалоговое окно модальным. По умолчанию, оно не модальное.
- onHidingHandler – обработчик события, вызываемый в начале закрытия диалогового окна
- onHideHandler – обработчик события, вызываемый после полного закрытия диалогового окна
- windowType – перечисляемое значение, которое определяет, будет ли окно открываться с цветами, использованными на стадии проектирования (т.е. в Application Builder) или в среде выполнения (т.е. во Viewer)
- top – значение двойной точности, допускающее null, которое определяет отступ окна, в пикселях, от верхнего края приложения. При отсутствии, окно центрируется по вертикали.
- left – значение двойной точности, допускающее null, которое задает отступ окна, в пикселях, от левого края приложения. При отсутствии, окно центрируется по горизонтали.
Метод 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).
![Примечание Примечание](rsrc/note.png)
Поскольку компоновки не обязательно содержат ваш интерфейс, убедитесь в осуществлении обработки ситуации, когда FindControlInLayout возвратит null.
Не следует программно передвигаться по визуальному дереву для динамического добавления элементов в приложение. Это подход требует специального структурирования визуального дерева и поэтому является ненадежным. Код, проделывающий эти действия, может в некоторых компоновках и релизах не работать.
Подробнее см. раздел Создание пользовательской компоновки, а также примеры раздела Элементы управления ArcGIS Viewer for Silverlight (интерактивные примеры).
Кисти
Расширенная сборка включает в себя набор кистей, использующихся во Viewer и Application Builder. Используйте встроенные кисти, чтобы раскрасить свой интерфейс. Это сохранит цвета вашего интерфейса, взятые из приложения, и позволит конечным пользователям настраивать их с помощью элементов управления темы.
Доступны следующие виды кистей:
Кисти вьюера
- BackgroundGradientBrush – основной цвет фона элементов интерфейса во Viewer. Используется в качестве фона диалоговых окон и боковых панелей.
- BackgroundStartGradientStopColorBrush – начальный цвет BackgroundGradientBrush.
- BackgroundEndGradientStopColorBrush – конечный цвет BackgroundGradientBrush.
- BackgroundTextColorBrush – основной цвет текста элементов интерфейса во Viewer. Предназначен для использования с текстом, наложенным на элементы с помощью BackgroundGradientBrush для фона или заливки.
- AccentColorBrush – задает цвет, контрастирующий с BackgroundGradientBrush, но отличающийся от цвета текста. Этот цвет применяется, например, для границ, полос прокрутки и кнопок.
- AccentTextColorBrush – задает цвет текста во Viewer, накладывающегося на элементы, использующие для фона или заливки AccentColorBrush.
- SelectionColorBrush – предназначен для использования как цвет выбранных элементов. Этот цвет используется, например, для выделения выбранного слоя в содержании карты.
- SelectionOutlineColorBrush – предназначен для использования вместе с кистью SelectionColorBrush для обозначения выборки. Этот цвет используется, например, чтобы отметить выбранный слой в Содержании карты.
Кисти Application Builder
- DesignHostBackgroundBrush – основной цвет фона элементов интерфейса в Application Builder.
- DesignHostBackgroundTextBrush – основной цвет текста элементов интерфейса в Application Builder. Предназначен для использования с текстом, наложенным на элементы с помощью DesignHostBackgroundBrush для фона или заливки.
- DesignHostAccentBrush – задает цвет, контрастирующий с цветом фона в Application Builder, но отличающийся от цвета текста.
- DesignHostAccentTextBrush – задает цвет текста в Application Builder, накладывающегося на элементы, использующие для фона или заливки DesignHostAccentBrush.
Действия при закрытии диалогового окна
Чтобы начать действие, когда показываемое вашим add-in окно закрывается, используйте обработчик событий onHidingHandler или параметр onHideHandler метода MapApplication.Current.ShowWindow.
- onHidingHandler – позволяет включить логику перед закрытием окна и, если это необходимо, отменить отображение окна и завершить операцию. Можно использовать это, например, в случае, когда пользователь закрывает окно во время выполнения операции, и вы хотите спросить его, действительно ли он собирается прервать операцию.
- onHideHandler – для выполнения логических операций после закрытия окна. Вы можете использовать это, например, для удаления итогового слоя с карты.