Грэг Дункан

Сегодняшний проект Адольфо Маринучи (Adolfo Marinucci) из тех, которые вы могли видеть и даже не знать о нем. Он используется в ряде мест и приложений и позволяет создавать профессионально выглядящие и взаимодействующие с пользователем приложения, не обращаясь к своей копилке…

Закрепление панелей, как в Visual Studio? Управление окнами? Автоматически скрываемые области? Хотите бесплатные (по новой лицензии BSD) элементы управления WPF, позволяющие аналогичные вещи?

AvalonDock

Описание проекта

AvalonDock – это библиотека элементов управления WPF, позволяющая создавать системы с закреплением панелей, вроде той, которая имеется в VisualStudio.

Возможности

  • Поддержка дизайна MVVM
  • Почти у всех элементов можно менять стили
  • Поддержка элементов управления Windows Forms

...

Руководство по началу работы с AvalonDock 2.0. Часть 1

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

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

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

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

clip_image002

  • DockingManager. Это центральный элемент в AvalonDock. Он упорядочивает содержащиеся в нем панели, управляет исчезающими панелями и плавающими окнами. На приведенном изображении объект DockingManager содержит всё (в терминах WPF) от панели инструментов наверху, до строки статуса внизу. Также класс DockingManager управляет сохранением и восстановлением макета.
  • LayoutPanel. Эта панель упорядочивает дочерние панели по заданному направлению (выбранному с помощью параметра «Ориентация»), добавляя возможность изменения размеров. На рисунке LayoutPanel с горизонтальной ориентацией упорядочивает три панели: LayoutAnchorablePane слева, LayoutDocumentPane в центре и LayoutDockablePane справа.
  • LayoutAnchorablePane. Этот элемент макета содержит коллекцию объектов LayoutAnchorable. Обычно он упорядочивает содержимое в виде закладок. На картинке LayoutDockablePane является контейнером содержимого 'Strumenti' и 'Progetti' (Инструменты и Проекты) слева и 'Classi' и 'Proprieta'' (Классы и Свойства) справа. Панель LayoutDockablePane может автоматически скрываться (как панели «Ошибки», «Список действий» и «Вывод») и перетаскиваться на DockingManager как плавающее окно или прикрепляться к бордюру родительского элемента DockingManager.
  • LayoutDocumentPane. Панель данного типа обычно содержит документы (объекты типа DocumentContent), но также может объекты DockableContents вроде 'Tools' или 'Classes', как на примере выше. На нем содержимое документа помещено внутрь горизонтально ориентированной ResizingPanel в центральной области между двумя объектами DockablePane. Панель документа не может перемещаться.
  • LayoutAnchorable. Прикрепляемый контент представляет собой контейнер для элементов управления приложения. Он всегда находится в панели (LayoutAnchorablePane или LayoutDocumentPane). На снимке выше объектами LayoutAnchorable являются объект 'classi'(classes), который содержит объект SharpDevelop, 'strumenti'(tools), а также 'Errori' (errors). Он находится в скрытом состоянии и содержится в панели с установленным параметром автосокрытие. Как предполагает название LayoutAnchorable может быть перетащен из панели-контейнера и помещен в другую существующую панель или прицеплен к границе родительского DockingManager или оставлен в плавающем окне (LayoutAnchorableFloatingWindow).
  • LayoutDocument. iЭто содержимое, которое может помещаться лишь в LayoutDocumentPane. Это особый элемент, потому что его нельзя прицепить к границе, но можно лишь поместить в LayoutDocumentPane или сделать плавающим в LayoutDocumentFloatingWindow. На картинке объектами LayoutDocument являются файлы 'program.cs' или 'MainForm.cs'.
  • LayoutFloatingWindow. Это окно содержит элементы, которые можно перетаскивать по DockingManager. LayoutFloatingWindow (и его специализированные варианты LayoutAnchorableFloatingWindow и LayoutDocumentFloatingWindow) происходят от класса Window и всегда содержат панель (LayoutAnchorablePane или LayoutDocumentPane), которая, в свою очередь, содержит один или несколько элементов с контентом (LayoutAnchorable or LayoutDocument). Объект LayoutFloatingWindow создается напрямую из DockingManager, когда пользователь начинает операции перетаскивания над содержимым, или панелью DockablePane, или непосредственно из кода с помощью вызова метода LayoutContent.Float().
  • LayoutPane. Это базовый класс для LayoutDockablePane и LayoutDocumentPane. Он предоставляет общие свойства и методы для обоих классов.
  • LayoutContent. Это базовый класс для LayoutAnchorable и LayoutDocument. Он предоставляет общие свойства и методы для обоих классов.

...

Вот некоторые снимки примеров версии от 4 декабря 2012:

В запущенных примерах MVVM-кода есть пара ссылок, которые необходимо исправить.

clip_image004

Просто установите Nuget for AvalonDock и двигайтесь дальше. Фактически, если вы установите пакет через Nuget, вы также получите пару дополнительных тем.

clip_image006

Пример MVVM простой, но изящный. Вот его снимок:

clip_image008

А вот пара снимков использования других тем.

clip_image010

clip_image012

Насколько сложно изменить тему? Отредактировать меньше одной строки кода.

clip_image014

...

clip_image016

Так, вы консервативный разработчик WinForms? Чувствуете себя обойденным? Не стоит! Поддержка WinForm также включена!

clip_image018

clip_image020

Итак, переходите к Docking!