Шаблоны приложений для Visual Studio

Window interactions

Два основных типа окон, используемых в Visual Studio, — это редакторы документов и окна инструментов. Редкие, но возможные большие диалоги без режима. Хотя они все без режима в оболочке, их шаблоны принципиально отличаются. В этом разделе рассматриваются различия между окнами документов, окнами инструментов и диалогами без режима. Modal dialog patterns are covered in Dialogs.

Сравнение шаблонов использования окна

Document windows are almost always displayed within the document well. Это дает редактору документов "центральный этап", чтобы упорядочить дополнительные окна инструментов вокруг.

A tool window is most often displayed as a separate, smaller window collapsed against the edge of the IDE. Это может быть видимым, скрытым или автоматически скрытым. However, sometimes tool windows are presented within the document well, by unchecking the Window/Docking property on the window. Это приводит к более широкой недвижимости, но и к общему решению по проектированию: при попытке интегрироваться в Visual Studio необходимо решить, должна ли ваша функция отображать окно инструментов или окно документа.

Modeless dialogs are discouraged in Visual Studio. Большинство бессерверных диалогов — это по определению, плавающие окна инструментов и должны быть реализованы таким образом. Бессерверные диалоги допускаются в случаях, когда размер обычного окна инструментов, закрепленного на стороне оболочки, будет слишком ограничивающим. Они также допускаются в тех случаях, когда пользователь, скорее всего, переместит диалоговое окно на дополнительный монитор.

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

Document window Tool window Modeless dialog
Position Всегда размещается в документе хорошо и не закрепляется вокруг краев интегрированной среды разработки. Его можно "вытащить", чтобы он плавал отдельно от основной оболочки. Как правило, вкладка закреплена по краям интегрированной среды разработки, но может быть настроена как плавающая, автоматическая скрытая (открепленная) или закрепленная в документе хорошо. Большое плавающее окно отдельно от интегрированной среды разработки.
Commit model Delayed commit

Чтобы сохранить данные в документе, пользователь должен выполнить команду "Сохранить файл>", "Сохранить как" или "Сохранить все". В окне документа есть концепция данных, которые в ней "грязные" затем фиксируются в одной из команд сохранения. При закрытии окна документа все содержимое сохраняется на диске или теряется.
Immediate commit

Нет модели сохранения. Для окон инструментов инспектора, которые помогают в редактировании файла, файл должен быть открыт в активном редакторе или конструкторе, а редактор или конструктор владеет сохранением.
Задержка или немедленная фиксация

Чаще всего в большом режиме диалоговое окно требует действия для фиксации изменений и позволяет выполнить операцию "Отмена", которая откатывает все изменения, внесенные в сеанс диалога. Это отличает диалоговое окно без режима от окна инструментов в этих окнах инструментов всегда имеет модель немедленной фиксации.
Visibility Открытие и создание (файл) и закрытие

Открытие окон документов выполняется путем открытия существующего документа или использования шаблона для создания нового документа. Команда "Открыть <конкретный редактор>" отсутствует.
Скрытие и отображение

Окна инструментов с одним экземпляром можно скрыть или показать. Содержимое и состояния в окне инструмента сохраняются в представлении или скрытом. Окна инструментов с несколькими экземплярами можно закрыть, а также скрыть. При закрытии окна средства с несколькими экземплярами содержимое и состояние в окне инструмента удаляется.
Запущено из команды

Диалоги запускаются из команды на основе задач.
Instances Multi-instance

Несколько редакторов могут открываться одновременно и редактировать разные файлы, а некоторые редакторы также позволяют открывать один и тот же файл в нескольких редакторах (с помощью команды "Окно > нового окна ").

Один редактор может одновременно редактировать один или несколько файлов (конструктор проектов).
Один или несколько экземпляров

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

Окна инструментов с одним экземпляром и несколькими экземплярами должны быть связаны с активным окном документа, если не существует убедительных причин.
Single-instance
Examples Text editors, like the code editor

Design surfaces, like a form designer or a modeling surface

Макеты элементов управления, аналогичные диалоговым окнам, например конструктору манифестов
The Solution Explorer provides a solution and projects contained within the solution

The Server Explorer provides a hierarchical view of servers and data connections that the user chooses to open in the window. Открытие объекта из иерархии базы данных, например запроса, открывает окно документа и позволяет пользователю изменять запрос.

The Property Browser displays properties for the object selected either in a document window or another tool window. Свойства представлены либо в иерархическом представлении сетки, либо в сложных элементах управления, например в диалоговых окнах, и позволяют пользователю задавать значения этих свойств.

Tool windows

Окна инструментов поддерживают работу пользователя, которая происходит в окнах документов. Их можно использовать для отображения иерархии, представляющей фундаментальный корневой объект, который предоставляет Visual Studio и может управлять ими.

При рассмотрении нового окна инструментов в интегрированной среде разработки авторы должны:

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

  • При необходимости используйте стандартную панель команд в верхней части окна инструментов.

  • Будьте согласованы с шаблонами, которые уже присутствуют в других окнах инструментов для управления презентацией и навигацией по клавиатуре.

  • Будьте согласованы с представлением элемента управления в других окнах инструментов.

  • Автоматически отображать окна инструментов для конкретного документа, чтобы они отображались только при активации родительского документа.

  • Убедитесь, что содержимое окна доступно для навигации с помощью клавиатуры (клавиши со стрелками поддержки).

Состояния окна инструментов

Окна инструментов Visual Studio имеют разные состояния, некоторые из которых активируются пользователем (например, функция автоматического скрытия). Другие состояния, такие как автовидение, позволяют окнам инструментов отображаться в правильном контексте и скрываться при необходимости. В общей сложности существует пять состояний окна инструментов.

  • Docked/pinned tool windows can be attached to any of the four sides of the document area. Значок pushpin отображается в строке заголовка окна инструментов. Окно инструментов можно закрепить по горизонтали или по вертикали вдоль края оболочки и других окон инструментов, а также быть привязанным к вкладкам.

  • Auto-hidden tool windows are unpinned. Окно может выходить из видимости, оставляя вкладку (с именем окна инструмента и его значком) на краю области документа. Окно инструментов выходит, когда пользователь наведите указатель мыши на вкладку.

  • Auto-visible tool windows automatically appear when another piece of UI, like an editor, is launched or gains focus.

  • Floating tool windows hover outside the IDE. Это полезно для конфигураций с несколькими мониторами.

  • Tabbed document tool windows can be docked within the document well. Это полезно для больших окон инструментов, таких как обозреватель объектов, которые требуют больше недвижимости, чем закрепление к краям кадра позволяет.

Состояния окна инструментов в Visual Studio
Состояния окна инструментов в Visual Studio

Один экземпляр и несколько экземпляров

Окна инструментов — один экземпляр или несколько экземпляров. Некоторые окна инструментов с одним экземпляром могут быть связаны с активным окном документа, а окна инструментов с несколькими экземплярами могут не быть. Окна инструментов с несколькими экземплярами отвечают команде "Окно > нового окна ", создав новый экземпляр окна. На следующем рисунке показано окно инструментов, включающего команду "Создать окно", если экземпляр окна активен:

Окно инструментов, включающем команду
Окно инструментов, включающего команду "Новое окно", если экземпляр окна активен

Окна инструментов с одним экземпляром могут быть скрытыми или отображаемыми, а окна инструментов с несколькими экземплярами могут быть закрыты, а также скрыты. Все окна инструментов могут быть закреплены, связаны с вкладками, плавают или задаются как дочернее окно интерфейса Multiple-Document (MDI) (аналогично окну документа). Все окна инструментов должны отвечать на соответствующие команды управления окнами в меню Окна:

Команды управления окнами в меню окна Visual Studio
Команды управления окнами в меню окна Visual Studio

Окна инструментов для конкретного документа

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

Примеры окон инструментов, содержимое которых отражает выбранный редактор, — панель элементов и структура документа. В этих окнах отображается подложка, если в редакторе есть фокус, который не предлагает контекст для окна.

В некоторых окнах инструментов отображается список навигации элементов, с которыми пользователь может взаимодействовать. В этом типе окна всегда должны быть отзывы о текущем элементе в списке, даже если окно неактивно. The list should respond to the GoToNextLocation and GoToPrevLocation commands by also changing the currently selected item in the window

Примерами навигации по окнам инструментов списка являются обозреватель решений и окно "Результаты поиска".

Типы окон инструментов

Общие окна инструментов и их функции

Иерархические окна инструментов

Tool window Function
Solution Explorer Иерархическое дерево, отображающее список документов, содержащихся в проектах, других файлах и элементах решения. Отображение элементов в проектах определяется пакетом, который владеет типом проекта (например, ссылочными, каталогами или смешанными типами).
Class View Иерархическое дерево классов и различных элементов рабочего набора документов, независимо от самих файлов.
Server Explorer Иерархическое дерево, отображающее все серверы и подключения к данным в решении.
Document Outline Иерархическая структура активного документа.

Окна инструментов сетки

Tool window Function
Properties Сетка, отображающая список свойств для выбранного объекта, а также средства выбора значений для изменения этих свойств.
Task List Сетка, которая позволяет пользователю создавать и изменять и удалять задачи и комментарии.

Окна инструментов содержимого

Tool window Function
Help Окно, позволяющее пользователям обращаться к различным методам получения справки, от видео "Как делать?" на форумы MSDN.
Dynamic Help Окно инструментов, отображающее ссылки на разделы справки, применимые к текущему выбору.
Object Browser Набор кадров с двумя столбцами со списком компонентов иерархических объектов в левой области и свойствах и методах объекта в правом столбце.

Окна инструментов диалогового окна

Tool window Function
Find Диалоговое окно, позволяющее пользователю находить или находить и заменять их в различных файлах в решении.
Advanced Find Диалоговое окно, позволяющее пользователю находить или находить и заменять их в различных файлах в решении.

Другие окна инструментов

Tool window Function
Toolbox Окно инструментов, используемое для хранения элементов, которые будут удалены на поверхности конструктора, предоставляя согласованный источник перетаскивания для всех конструкторов.

Окна инструментов отладчика

Tool window Function
Autos
Immediate
Output Окно вывода можно использовать при наличии текстовых событий или состояния для объявления.
Memory
Breakpoints
Running
Documents
Call Stack
Locals
Watches
Disassembly
Registers
Threads

Соглашения редактора документов

Document interactions

"Документ хорошо" является самым большим пространством в интегрированной среде разработки и является местом, где пользователь, как правило, сосредоточил свое внимание на выполнении своих задач, помогая дополнительными окнами инструментов. Редакторы документов представляют основные единицы работы, которые пользователь открывает и сохраняет в Visual Studio. Они сохраняют сильное чувство выбора, связанного с обозревателем решений или другими активными окнами иерархии. Пользователь должен иметь возможность указывать на одно из этих окон иерархии и знать, где находится документ, и его связь с решением, проектом или другим корневым объектом, предоставленным пакетом Visual Studio.

Для редактирования документов требуется согласованный пользовательский интерфейс. Чтобы позволить пользователю сосредоточиться на задаче, а не на командах управления окнами и поиска, выберите стратегию представления документов, которая лучше всего соответствует задачам пользователя для редактирования этого типа документа.

Общие взаимодействия для документа хорошо

  • Maintain a consistent interaction model in the common New File and Open File experiences.

  • Обновите связанные функции в связанных окнах и меню при открытии окна документа.

  • Menu commands are appropriately integrated into common menus like Edit, Format, and View menus. Если доступно значительное количество специализированных команд, можно создать новое меню. Это новое меню должно отображаться только в том случае, если в документе есть фокус.

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

  • Всегда сохраняйте выбор в обозревателе решений или аналогичном окне активной иерархии.

  • Double-clicking a document in the Solution Explorer should perform the same action as Open.

  • If more than one editor can be used on a document type, the user should be able to override or reset the default action on a given document type using the Open With dialog box by right-clicking on the file and selecting Open With from the shortcut menu.

  • Не создавайте мастер в документе хорошо.

Ожидания пользователей для определенных типов документов

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

  • Text-based editor: code editor, log files

  • Design surface: WPF forms designer, Windows forms

  • Dialog-style editor: Manifest Designer, project properties

  • Model designer: workflow designer, codemap, architecture diagram, progression

Существует также несколько типов, отличных от редактора, которые хорошо используют документ. Хотя они сами не редактируют документы, они должны следовать стандартным взаимодействиям для окон документов.

  • Reports: IntelliTrace report, Hyper-V report, profiler report

  • Dashboard: Diagnostics Hub

Text-based editors

  • Документ участвует в модели вкладки предварительного просмотра, что позволяет просматривать документ без его открытия.

  • Структура документа может быть представлена в окне средства компаньона, например в структуре документа.

  • IntelliSense (при необходимости) будет работать согласованно с другими редакторами кода.

  • Всплывающие окна или вспомогательный пользовательский интерфейс соответствуют аналогичным стилям и шаблонам для существующего аналогичного пользовательского интерфейса, например CodeLens.

  • Сообщения о состоянии документа будут представлены в элементе управления infobar в верхней части документа или в строке состояния.

  • Пользователь должен иметь возможность настраивать внешний вид шрифтов и цветов с помощью страницы "Параметры инструментов>", общей страницы "Шрифты и цвета" или одной из них в редакторе.

Design surfaces

  • Пустой конструктор должен иметь подложку на поверхности, указывающую, как приступить к работе.

  • Механизмы переключения представлений будут следовать существующим шаблонам, таким как двойной щелчок, чтобы открыть редактор кода или вкладки в окне документа, позволяя взаимодействовать с обеими панелями.

  • Добавление элементов в область конструктора должно выполняться с помощью панели элементов, если не требуется строго определенное окно инструментов.

  • Элементы на поверхности будут соответствовать согласованной модели выбора.

  • Embedded toolbars contain document-specific commands only, not common commands such as Save.

Dialog-style editors

  • Макет элемента управления должен соответствовать обычным соглашениям о макете диалогового окна.

  • Вкладки в редакторе не должны соответствовать внешнему виду вкладок документов, они должны соответствовать одному из двух разрешенных стилей внутренней вкладки.

  • Пользователи должны иметь возможность взаимодействовать с элементами управления только с помощью клавиатуры; либо активируя редактор и вкладки с помощью элементов управления, либо с помощью стандартных mnemonics.

  • Конструктор должен использовать общую модель сохранения. Общие кнопки сохранения или фиксации не должны размещаться на поверхности, хотя другие кнопки могут быть подходящими.

Model designers

  • Пустой конструктор должен иметь подложку на поверхности, указывающую, как приступить к работе.

  • Добавление элементов в область конструктора должно выполняться с помощью панели элементов.

  • Элементы на поверхности будут соответствовать согласованной модели выбора.

  • Embedded toolbars contain document-specific commands only, not common commands such as Save.

  • Условные обозначения могут отображаться на поверхности либо на поверхности, либо на подложку.

  • Пользователь должен иметь возможность настроить внешний вид шрифтов и цветов с помощью страницы "Параметры инструментов>", общей страницы "Шрифты и цвета" или в редакторе.

Reports

  • Отчеты обычно доступны только для сведений и не участвуют в модели сохранения. Однако они могут включать в себя взаимодействие, например ссылки на другие соответствующие сведения или разделы, которые разворачиваются и свернуты.

  • Большинство команд на поверхности должны быть гиперссылками, а не кнопками.

  • Макет должен включать заголовок и следовать стандартным рекомендациям по макету отчета.

Dashboards

  • Панели мониторинга сами по себе не имеют модели взаимодействия, но служат средством для предоставления различных других инструментов.

  • Они не участвуют в модели сохранения.

  • Пользователи должны иметь возможность взаимодействовать только с элементами управления с помощью клавиатуры, активируя редактор и вкладки с помощью элементов управления или с помощью стандартных mnemonics.

Dialogs

Introduction

Диалоги в Visual Studio обычно поддерживают одну дискретную единицу работы пользователя, а затем закрывать.

Если вы определили, что вам нужно диалоговое окно, у вас есть три варианта в порядке предпочтения:

  1. Интеграция функций в один из общих диалоговых окон в Visual Studio.

  2. Создайте собственное диалоговое окно с помощью шаблона, найденного в существующем аналогичном диалоговом окне.

  3. Создайте диалоговое окно, следуя рекомендациям по взаимодействию и макету.

В этом разделе описывается, как выбрать правильный шаблон диалогового окна в рабочих процессах Visual Studio и общие соглашения для проектирования диалогов.

Themes

Диалоги в Visual Studio соответствуют одному из двух основных стилей:

Standard (unthemed)

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

Themed

Специальные диалоги сигнатурами могут быть темами. Тематические диалоги имеют отдельный внешний вид, который также имеет некоторые специальные шаблоны взаимодействия, связанные с стилем. Тема диалогового окна только в том случае, если оно соответствует следующим требованиям:

  • The dialog is a common experience that will be seen and used often or by many users (for example, the New Project dialog.

  • The dialog contains prominent product brand elements (for example, the Account Settings dialog).

  • Диалоговое окно отображается как неотъемлемая часть большего потока, включающего другие тематические диалоги (например, диалоговое окно "Добавить подключенную службу ").

  • Диалог является важной частью опыта, который играет стратегическую роль в продвижении или разных версиях продукта.

При создании тематических диалогов используйте соответствующие цвета среды и следуйте правильным шаблонам макета и взаимодействия. (См . макет для Visual Studio.)

Dialog design

Хорошо разработанные диалоги принимают во внимание следующие элементы:

  • Поддерживаемая задача пользователя

  • Стиль текста диалогового окна, язык и терминология

  • Выбор элементов управления и соглашения пользовательского интерфейса

  • Спецификация визуального макета и выравнивание элементов управления

  • Keyboard access

Content organization

Рассмотрим различия между этими основными типами диалогов:

  • Simple dialogs present controls in a single modal window. В презентации могут быть варианты сложных шаблонов элементов управления, включая средство выбора полей или панель значков.

  • Layered dialogs are used to make the most of screen real estate when a single piece of UI comprises multiple groups of controls. Группы диалогового окна "слои" с помощью элементов управления вкладками, элементов управления списком навигации или кнопок, чтобы пользователь смог выбрать группирование для просмотра в любой момент.

  • Wizards are useful for directing the user through a logical sequence of steps toward the completion of a task. Ряд вариантов предлагаются на последовательных панелях, иногда вводя различные рабочие процессы ("ветви"), зависящие от выбора, сделанного на предыдущей панели.

Simple dialogs

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

>Создание ключа строгого имени является примером простого диалогового окна в Visual Studio.
Создание ключа строгого имени является примером простого диалогового окна в Visual Studio.

Layered dialogs

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

В самом простом случае механизм переключения между группами — это элемент управления табуляции. Существует несколько альтернативных вариантов. Сведения о том, как выбрать наиболее подходящий стиль, см. в разделе "Приоритеты" и "Слои".

Диалоговое окно "Параметры инструментов>" является примером многоуровневого диалогового окна с помощью внедренного дерева:

Инструменты > Параметры — это пример многоуровневого диалогового окна в Visual Studio.
Параметры инструментов > — это пример многоуровневого диалогового окна в Visual Studio.

Wizards

Мастеры полезны для направления пользователя через логическую последовательность шагов в завершении задачи. Ряд вариантов предлагается на последовательных панелях, и пользователь должен продолжить каждый шаг, прежде чем перейти к следующему. Once sufficient defaults are available, the Finish button is enabled.

Модальные мастеры используются для задач, которые:

  • Содержит ветвление, где предлагаются разные пути в зависимости от выбора пользователей

  • Содержит зависимости между шагами, в которых последующие шаги зависят от входных данных пользователя из предыдущих шагов.

  • Достаточно сложны, чтобы пользовательский интерфейс использовался для объяснения предлагаемых вариантов и возможных результатов на каждом шаге.

  • Являются транзакционные, требуя выполнения набора шагов в полном объеме до фиксации изменений.

Common conventions

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

Рекомендации по макету см. в разделе "Макет" для Visual Studio.

Size

Диалоговые окна должны соответствовать минимальному разрешению экрана 1024x768, а начальный размер диалогового окна не должен превышать 900x700 пикселей. Диалоговые окна могут быть изменены, но это не обязательно.

Существует две рекомендации для диалоговых окон с изменением размера:

  1. Этот минимальный размер определяется для диалогового окна, который оптимизирует набор элементов управления без обрезки и настраивает на соответствие разумному росту локализации.

  2. Размер, масштабируемый пользователем, сохраняется из сеанса в сеанс. Например, если пользователь масштабирует диалоговое окно до 150%, последующий запуск диалогового окна будет отображаться в 150%.

Position

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

Для диалоговых окон, доступных для изменения размера, размер должен сохраняться при последующих запусках. Для модальных диалогов с изменением размера позиция не требуется сохраняться. Отображение их в центре в интегрированной среде разработки предотвращает возможность появления диалогового окна в непредсказуемой или непригодной позиции при изменении конфигурации отображения пользователя.

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

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

Modality

Модальное значение означает, что пользователям необходимо завершить или отменить диалоговое окно перед продолжением. Так как модальные диалоги блокируют взаимодействие пользователя с другими частями среды, поток задач вашей функции должен использовать их как можно более экономно. Если требуется модальная операция, Visual Studio имеет ряд общих диалоговых окон, в которые можно интегрировать функции. Если необходимо создать новое диалоговое окно, следуйте шаблону взаимодействия существующего диалогового окна с аналогичной функциональностью.

When users need to perform two activities at once, like Find and Replace while writing new code, the dialog should be modeless so that the user can easily switch between them. Visual Studio обычно использует окна инструментов для этой связанной задачи с поддержкой редактора.

Control configuration

Будьте согласованы с существующими конфигурациями элементов управления, которые выполняют то же самое в Visual Studio.

Title bars

  • Текст в строке заголовка должен отражать имя команды, которая ее запустила.

  • Значок не должен использоваться в заголовках диалоговых окон. В случаях, когда системе требуется один, используйте логотип Visual Studio.

  • Диалоговые окна не должны содержать кнопки свести к минимуму или развернуть их.

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

    Спецификации руководства для заголовков в диалоговых окнах Visual Studio
    Спецификации руководства для строк заголовков в диалоговых окнах Visual Studio

Control buttons

In general, OK, Cancel, and Help buttons should be arranged horizontally in the lower right corner of the dialog. Альтернативный вертикальный стек допускается, если в диалоговом окне есть несколько других кнопок в нижней части диалогового окна, которые будут представлять визуальную путаницу с кнопками управления.

Допустимые конфигурации для кнопок управления в диалоговых окнах Visual Studio
Допустимые конфигурации для кнопок управления в диалоговых окнах Visual Studio

Диалоговое окно должно содержать кнопку управления по умолчанию. This is a button that is invoked by pressing the Enter key - see Button IsDefault .To determine the best command to use as the default, choose from the following options (listed in order of precedence):

  • Выберите самую безопасную и самую безопасную команду в качестве значения по умолчанию. Это означает, что выбор команды, скорее всего, предотвращает потерю данных и избегает непреднамеренного доступа к системе.

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

Избегайте окончательного деструктивного действия для команды по умолчанию. Если такая команда присутствует, выберите более безопасную команду в качестве используемой по умолчанию.

Access keys

Do not use access keys for OK or Cancel. Enter and Escape shortcuts can be set with Button IsDefault and Button IsCancel respectively.

Imagery

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

Приоритеты и слои

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

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

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

Если вы определили, что диалоговое окно необходимо, но связанные функциональные возможности, которые вы хотите представить пользователю, выходит за рамки того, что можно отобразить в простом диалоговом окне, то вам нужно слоить пользовательский интерфейс. Наиболее распространенными методами слоев Visual Studio являются вкладки и коридоры или панели мониторинга. В некоторых случаях регионы, которые могут развернуть и свернуть, могут быть подходящими. Адаптивный пользовательский интерфейс обычно не рекомендуется в Visual Studio.

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

Tabbing
Switching mechanism Преимущества и соответствующее использование Недостатки и недопустимое использование
Tab control Логически группировать страницы диалоговых окон в связанные наборы

Полезно для менее пяти (или количества вкладок, которые помещаются в одну строку в диалоговом окне) страниц связанных элементов управления в диалоговом окне

Метки вкладок должны быть короткими: одно или два слова, которые могут легко идентифицировать содержимое.

Общий стиль системного диалога

Пример: свойства элемента проводника >
Создание описательных коротких меток может быть трудно

Как правило, не масштабируется за пять вкладок в одном диалоговом окне

Неуместно, если у вас слишком много вкладок для одной строки (используйте альтернативный метод слоев)

Not extensible
Sidebar navigation Простое переключение устройства, которое может содержать больше категорий, чем вкладки

Неструктурированный список категорий (без иерархии)

Extensible

Пример: настройка... > Добавить команду
Не рекомендуется использовать горизонтальное пространство, если меньше трех групп

Задача может быть лучше подходит для раскрывающегося списка
Tree control Разрешает неограниченные категории

Разрешает группирование и (или) иерархию категорий

Extensible

Пример: параметры инструментов >
Сильно вложенные иерархии могут привести к чрезмерной горизонтальной прокрутке

Visual Studio имеет чрезмерное количество представлений дерева
Wizard Помогает с завершением задачи путем указания пользователя с помощью последовательных шагов на основе задач: мастер представляет высокоуровневую задачу, а отдельные панели представляют подзадачи, необходимые для выполнения общей задачи.

Полезно, если задача пересекает границы пользовательского интерфейса, так как если пользователю в противном случае придется использовать несколько редакторов и окон инструментов для выполнения задачи.

Полезно, если задача требует ветвления

Полезно, если задача содержит зависимости между шагами

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

Пользователи могут стать перегруженными и запутаться мастером с слишком большим количеством шагов

Мастера имеют ограниченное количество экранных недвижимости
Коридоры или панели мониторинга

Коридоры и панели мониторинга — это диалоги или панели, которые служат точками запуска для других диалоговых окон и окон. Хорошо разработанный "коридор" сразу же отображает только наиболее распространенные варианты, команды и параметры, что позволяет пользователю легко выполнять распространенные задачи. Как и реальный коридор предоставляет двери для доступа к комнатам за ними, здесь менее распространенный пользовательский интерфейс собирается в отдельные "комнаты" (часто другие диалоги) связанных функциональных возможностей, которые могут быть доступны из главной коридорной полосы.

Кроме того, пользовательский интерфейс, который предлагает все доступные функциональные возможности в одной коллекции, а не рефакторинг менее распространенных функциональных возможностей в отдельные расположения— это просто панель мониторинга.

Концепция холла для предоставления дополнительного пользовательского интерфейса в Outlook
Концепция коридора для предоставления дополнительного пользовательского интерфейса в Outlook

Adaptive UI

Отображение или скрытие пользовательского интерфейса на основе использования или самостоятельного взаимодействия пользователя — это другой способ представления необходимого пользовательского интерфейса при скрытии других частей. Это не рекомендуется в Visual Studio, так как алгоритмы принятия решений о том, когда показывать или скрывать пользовательский интерфейс могут быть сложными, и правила всегда будут неправильными для некоторых вариантов.

Projects

Проекты в обозревателе решений

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

Проекты должны всегда:

  • Поддержка возможности добавления папок проекта для упорядочивания содержимого проекта

  • Поддержание согласованной модели для сохраняемости проекта

Проекты также должны поддерживать согласованные модели взаимодействия для:

  • Удаление элементов проекта

  • Saving documents

  • Редактирование свойств проекта

  • Изменение проекта в альтернативном представлении

  • Drag-and-drop operations

Модель взаимодействия перетаскивания

Проекты обычно классифицируют себя как ссылочные (способные сохранять только ссылки на элементы проекта в хранилище), каталоги (способные сохранять только элементы проекта физически, хранящиеся в иерархии проекта), или смешанные (способные сохранять ссылки или физические элементы). The IDE accommodates all three types of projects simultaneously within the Solution Explorer.

From a drag-and-drop perspective, the following characteristics should apply to each type of project within the Solution Explorer:

  • Reference-based project: The key point is that the project is dragging around a reference to an item in storage. Если проект на основе ссылок выступает в качестве источника для операции перемещения, он должен удалять ссылку только на элемент из проекта. Элемент не должен быть удален с жесткого диска. Если проект на основе ссылок выступает в качестве целевого объекта для операции перемещения (или копирования), он должен добавить ссылку на исходный элемент, не делая частную копию элемента.

  • Directory-based project: From a drag-and-drop point of view, the project is dragging around the physical item rather than a reference. Когда проект на основе каталогов выступает в качестве источника для операции перемещения, он должен в конечном итоге удалить физический элемент с жесткого диска, а также удалить его из проекта. Когда проект на основе каталогов выступает в качестве целевого объекта для операции перемещения (или копирования), он должен сделать копию исходного элемента в его целевом расположении.

  • Mixed-target project: From a drag-and-drop point of view, the behavior of this type of project is based on the nature of the item being dragged (either a reference to an item in storage or the item itself). Правильное поведение ссылок и физических элементов описано выше.

If there were only one type of project in the Solution Explorer, then drag-and-drop operations would be straightforward. Так как каждая система проектов имеет возможность определять собственное поведение перетаскивания, некоторые рекомендации (на основе поведения перетаскивания проводника Windows) должны следовать, чтобы обеспечить прогнозируемое взаимодействие с пользователем:

  • An unmodified drag operation in the Solution Explorer (when neither Ctrl nor Shift keys are held down) should result in a move operation.

  • Операция перетаскивания также должна привести к операции перемещения.

  • Операция ctrl-перетаскивания должна привести к операции копирования.

  • Эталонные и смешанные системы проектов поддерживают понятие добавления ссылки (или ссылки) в исходный элемент. Если эти проекты являются мишенью операции перетаскивания (при нажатии клавиш CTRL+ SHIFT ), она должна привести к ссылке на элемент, добавляемый в проект.

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

Это также вводит в заблуждение, чтобы разрешить операцию копирования между этими типами проектов, так как целевой эталонный проект не должен делать независимую копию исходного элемента. Аналогичным образом перетаскивание клавиш CTRL+ SHIFT в целевой проект на основе каталогов не должно быть разрешено, так как проект на основе каталогов не может сохранять ссылки. В случаях, когда операция перетаскивания не поддерживается, интегрированная среда разработки должна запретить удаление и показать пользователю курсор без удаления (показанную в таблице указателя ниже).

Чтобы правильно реализовать поведение перетаскивания, исходный проект перетаскивания должен сообщать о своей природе целевому проекту. (Например, на основе ссылок или каталогов?) Эти сведения указываются форматом буфера обмена, предлагаемым источником. В качестве источника операции перетаскивания (или операции копирования буфера обмена) проект должен предлагать CF_VSREFPROJECTITEMSCF_VSSTGPROJECTITEMS либо соответственно, в зависимости от того, основан ли проект на основе ссылок или на основе каталогов. Оба этих формата имеют одно и то же содержимое данных, которое аналогично формату Windows CF_HDROP , за исключением того, что списки строк, а не имена файлов, являются двойнымNULL прерванным списком Projref строк (как возвращаются из IVsSolution::GetProjrefOfItem или ::GetProjrefOfProject по мере необходимости).

В качестве целевого объекта удаления (или операции вставки буфера обмена) проект должен принимать оба CF_VSREFPROJECTITEMSCF_VSSTGPROJECTITEMSи, хотя точную обработку операции перетаскивания зависит от характера целевого проекта и исходного проекта. Исходный проект объявляет свою природу независимо от того, предлагает CF_VSREFPROJECTITEMS ли он или CF_VSSTGPROJECTITEMS. Цель падения понимает свою собственную природу и поэтому имеет достаточно информации, чтобы принять решения о том, следует ли выполнять перемещение, копирование или ссылку. Пользователь также изменяет операцию перетаскивания, нажав клавиши CTRL, SHIFT или КЛАВИШИ CTRL и SHIFT. Важно, чтобы целевой объект удаления правильно указывал, какая операция будет выполняться заранее в его DragEnter и DragOver методах. The Solution Explorer automatically knows whether the source project and the target project are the same project.

Перетаскивание элементов проекта между экземплярами Visual Studio (например, из одного экземпляра devenv.exe в другой) не поддерживается. The Solution Explorer also directly disables this.

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

Mouse pointer Command Description
Значок No drop Элемент нельзя удалить в указанное расположение.
Значок Copy Элемент будет скопирован в целевое расположение.
Значок перемещения мыши Move Элемент будет перемещен в целевое расположение.
Значок Add reference Ссылка на выбранный элемент будет добавлена в целевое расположение.

Reference-based projects

В следующей таблице перечислены операции перетаскивания (а также операции вырезания и копирования и вставки), которые должны выполняться на основе природы исходного элемента и клавиш модификатора, нажатых для целевых проектов на основе ссылок:

Modifier Category Исходный элемент: ссылка/ссылка Исходный элемент: физический элемент или файловая система (CF_HDROP)
No modifier Action Move Link
No modifier Target Добавляет ссылку на исходный элемент Добавляет ссылку на исходный элемент
No modifier Source Удаляет ссылку на исходный элемент Сохраняет исходный элемент
No modifier Result DROPEFFECT_MOVE возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище DROPEFFECT_LINK возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище
Shift+Drag Action Move No drop
Shift+Drag Target Добавляет ссылку на исходный элемент No drop
Shift+Drag Source Удаляет ссылку на исходный элемент No drop
Shift+Drag Result DROPEFFECT_MOVE возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище No drop
Ctrl+Drag Action Copy No drop
Ctrl+Drag Target Добавляет ссылку на исходный элемент No drop
Ctrl+Drag Source Сохраняет ссылку на исходный элемент No drop
Ctrl+Drag Result DROPEFFECT_COPY возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище No drop
Ctrl+Shift+Drag Action Link Link
Ctrl+Shift+Drag Target Добавляет ссылку на исходный элемент Добавляет ссылку на исходный элемент
Ctrl+Shift+Drag Source Сохраняет ссылку на исходный элемент Сохраняет исходный элемент
Ctrl+Shift+Drag Result DROPEFFECT_LINK возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище DROPEFFECT_LINK возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище
Ctrl+Shift+Drag Note Аналогично поведению перетаскивания для сочетаний клавиш в проводнике Windows.
Cut/Paste Action Move Link
Cut/Paste Target Добавляет ссылку на исходный элемент Добавляет ссылку на исходный элемент
Cut/Paste Source Сохраняет ссылку на исходный элемент Сохраняет исходный элемент
Cut/Paste Result Элемент остается в исходном расположении в хранилище Элемент остается в исходном расположении в хранилище
Copy/Paste Action Copy Link
Copy/Paste Source Добавляет ссылку на исходный элемент Добавляет ссылку на исходный элемент
Copy/Paste Result Сохраняет ссылку на исходный элемент Сохраняет исходный элемент
Copy/Paste Action Элемент остается в исходном расположении в хранилище Элемент остается в исходном расположении в хранилище

Directory-based projects

В следующей таблице перечислены операции перетаскивания (а также операции вырезания и копирования и вставки), которые должны выполняться на основе природы исходного элемента и клавиш модификатора, нажатых для целевых проектов на основе каталогов:

Modifier Category Исходный элемент: ссылка/ссылка Исходный элемент: физический элемент или файловая система (CF_HDROP)
No modifier Action Move Move
No modifier Target Копирует элемент в целевое расположение Копирует элемент в целевое расположение
No modifier Source Удаляет ссылку на исходный элемент Удаляет ссылку на исходный элемент
Shift+Drag Action Move Move
Shift+Drag Target Копирует элемент в целевое расположение Копирует элемент в целевое расположение
Shift+Drag Source Удаляет ссылку на исходный элемент Удаляет элемент из исходного расположения
Shift+Drag Result DROPEFFECT_MOVE возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище DROPEFFECT_MOVE возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище
Ctrl+Drag Action Copy Copy
Ctrl+Drag Target Копирует элемент в целевое расположение Копирует элемент в целевое расположение
Ctrl+Drag Source Сохраняет ссылку на исходный элемент Сохраняет ссылку на исходный элемент
Ctrl+Drag Result DROPEFFECT_COPY возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище DROPEFFECT_COPY возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище
Ctrl+Shift+Drag No drop No drop
Cut/Paste Action Move Move
Cut/Paste Target Копирует элемент в целевое расположение Копирует элемент в целевое расположение
Cut/Paste Source Удаляет ссылку на исходный элемент Удаляет элемент из исходного расположения
Cut/Paste Result Элемент остается в исходном расположении в хранилище Элемент удаляется из исходного расположения в хранилище
Copy/Paste Action Copy Copy
Copy/Paste Target Добавляет ссылку на исходный элемент Копирует элемент в целевое расположение
Copy/Paste Source Сохраняет исходный элемент Сохраняет исходный элемент
Copy/Paste Result Элемент остается в исходном расположении в хранилище Элемент остается в исходном расположении в хранилище

Mixed-target projects

В следующей таблице перечислены операции перетаскивания (а также операции вырезания и копирования и вставки), которые должны выполняться на основе природы исходного элемента и клавиш модификатора, нажатых для проектов смешанного назначения:

Modifier Category Исходный элемент: ссылка/ссылка Исходный элемент: физический элемент или файловая система (CF_HDROP)
No modifier Action Move Move
No modifier Target Добавляет ссылку на исходный элемент Копирует элемент в целевое расположение
No modifier Source Удаляет ссылку на исходный элемент Удаляет ссылку на исходный элемент
No modifier Result DROPEFFECT_ MOVE возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище DROPEFFECT_ MOVE возвращается как действие из ::Drop и элемент удаляется из исходного расположения в хранилище
Shift+Drag Action Move Move
Shift+Drag Target Добавляет ссылку на исходный элемент Копирует элемент в целевое расположение
Shift+Drag Source Удаляет ссылку на исходный элемент Удаляет элемент из исходного расположения
Shift+Drag Result DROPEFFECT_ MOVE возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище DROPEFFECT_ MOVE возвращается как действие из ::Drop и элемент удаляется из исходного расположения в хранилище
Ctrl+Drag Action Copy Copy
Ctrl+Drag Target Добавляет ссылку на исходный элемент Копирует элемент в целевое расположение
Ctrl+Drag Source Сохраняет ссылку на исходный элемент Сохраняет исходный элемент
Ctrl+Drag Result DROPEFFECT_ COPY возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище DROPEFFECT_ COPY возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище
Ctrl+Shift+Drag Action Link Link
Ctrl+Shift+Drag Target Добавляет ссылку на исходный элемент Добавляет ссылку на исходный исходный элемент
Ctrl+Shift+Drag Source Сохраняет ссылку на исходный элемент Сохраняет исходный элемент
Ctrl+Shift+Drag Result DROPEFFECT_ LINK возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище DROPEFFECT_ LINK возвращается в качестве действия из ::Drop и элемент остается в исходном расположении в хранилище
Cut/Paste Action Move Move
Cut/Paste Target Копирует элемент в целевое расположение Копирует элемент в целевое расположение
Cut/Paste Source Удаляет ссылку на исходный элемент Удаляет элемент из исходного расположения
Cut/Paste Result Элемент остается в исходном расположении в хранилище Элемент удаляется из исходного расположения в хранилище
Copy/Paste Action Copy Copy
Copy/Paste Target Добавляет ссылку на исходный элемент Копирует элемент в целевое расположение
Copy/Paste Source Сохраняет исходный элемент Сохраняет исходный элемент
Copy/Paste Result Элемент остается в исходном расположении в хранилище Элемент остается в исходном расположении в хранилище

These details should be taken into consideration when implementing dragging in the Solution Explorer:

  • Проектирование для нескольких сценариев выбора.

  • Имена файлов (полный путь) должны быть уникальными в целевом проекте или не должны быть разрешены.

  • Имена папок должны быть уникальными (без учета регистра) на том уровне, который они удаляются.

  • Существуют различия в поведении между файлами, открытыми или закрытыми во время перетаскивания (не упоминаются в приведенных выше сценариях).

  • Файлы верхнего уровня немного отличаются от файлов в папках.

Другая проблема заключается в том, как обрабатывать операции перемещения элементов с открытыми конструкторами или редакторами. Ожидаемое поведение выглядит следующим образом (это относится ко всем типам проектов):

  1. Если открытый редактор или конструктор не имеет несохраненных изменений, окно редактора или конструктора должно быть автоматически закрыто.

  2. Если в открытом редакторе или конструкторе есть несохраненные изменения, источник перетаскивания должен ожидать, пока произойдет удаление, а затем попросите пользователя сохранить незафиксированные изменения в открытых документах перед закрытием окна с запросом, аналогичным следующему:

    ==========================================================
         One or more open documents have unsaved changes.
    Do you want to save uncommitted changes before proceeding?
                      [Yes]  [No]  [Cancel]
    ==========================================================
    

Это дает пользователю возможность сохранить работу до того, как целевой объект сделает его копии. Добавлен новый метод IVsHierarchyDropDataSource2::OnBeforeDropNotify для включения этой обработки.

The target will then copy the state of the item as it is in storage (not including the unsaved changes in the editor if the user chose No). После завершения копирования целевого объекта (в IVsHierarchyDropDataSource::Drop) источник получает возможность завершить часть операции перемещения (в IVsHierarchyDropDataSource::OnDropNotify).

Все редакторы с несохраненных изменений должны оставаться открытыми. Для этих документов с несохраненных изменений это означает, что часть копирования операции перемещения будет выполнена, но часть удаления будет прервана. In a multiple selection scenario when the user chooses No, those documents with unsaved changes should not be closed or removed, but those without unsaved changes should be closed and removed.