Выполнение операций закрепления в коде¶
В этой теме описываются операции с панелями закрепления в коде.
Создание панелей закрепления¶
Вы можете создавать объекты DockPane
и DocumentPane
с помощью их конструкторов. После создания панели обычно требуется отобразить её в определённой позиции относительно другой панели или контейнера (группы). Метод DockManager.Dock
позволяет закрепить панель вдоль края другой панели, добавить панель в существующий контейнер и объединить панели в интерфейсе с вкладками. Чтобы добавить панель как дочерний элемент существующего контейнера, вы также можете использовать метод Add
контейнера.
Наиболее часто используемая перегрузка метода DockManager.Dock
определена следующим образом:
Параметр target
определяет панель или контейнер, относительно которого закрепляется исходный элемент (переданный как параметр item
).
Параметр dockType
определяет способ закрепления элемента относительно целевого элемента:
-
DockType.Fill
— Исходная и целевая панели объединяются в контейнер вкладок (TabGroup
). Если целевая панель уже принадлежит контейнеру вкладок, исходная панель добавляется в этот контейнер; дополнительный контейнер вкладок не создаётся. -
DockType.Left
,DockType.Right
,DockType.Top
,DockType.Bottom
— Исходный элемент закрепления докируется у соответствующей стороны целевого элемента закрепления. При необходимости методDockManager.Dock
создаёт дополнительный контейнер разделения (DockGroup
) по горизонтали или вертикали, как описано ниже.
Предположим, вы закрепляете исходную панель сверху или снизу целевой панели, которая принадлежит вертикальному контейнеру разделения.
В этом случае исходная панель добавляется как дочерний элемент существующего контейнера.
Если вы закрепите панель слева или справа от целевой панели, будет создан дополнительный контейнер горизонтального разделения, объединяющий исходную и целевую панели.
Такая же логика применяется, когда панель закрепляется рядом с целевой панелью, находящейся в контейнере горизонтального разделения. Если вы закрепите исходную панель слева или справа от целевой панели, исходная панель будет добавлена как дочерний элемент существующего горизонтального контейнера.
Если вы закрепите панель сверху или снизу целевой панели, будет создан дополнительный контейнер вертикального разделения, объединяющий исходную и целевую панели.
Используйте свойства DockPane.DockWidth
и DockPane.DockHeight
, чтобы задать размер панелей, когда они размещены в контейнере разделения.
Пример - Создание и отображение панелей рядом¶
Следующий код создаёт объекты DockPane
и DocumentPane
и располагает их, как показано на изображении ниже. Объекты DocumentPane
помещаются в контейнер DocumentGroup
, чтобы представить их в виде вкладок.
DockPane paneProperties = new DockPane()
{
Header = "Properties",
Glyph = ImageLoader.LoadSvgImage(Assembly.GetExecutingAssembly(), "Images/settings.svg"),
GlyphSize = new Avalonia.Size(16, 16)
};
DockPane paneDebug = new DockPane()
{
Header = "Debug",
Glyph = ImageLoader.LoadSvgImage(Assembly.GetExecutingAssembly(), "Images/debug2.svg"),
GlyphSize = new Avalonia.Size(16, 16)
};
DockPane paneOutput = new DockPane() { Header = "Output" };
dockManager1.Root = new DockGroup();
dockManager1.Dock(paneProperties, dockManager1.Root, DockType.Right);
paneProperties.DockWidth = new GridLength(150, GridUnitType.Pixel);
dockManager1.Dock(paneOutput, paneProperties, DockType.Left);
dockManager1.Dock(paneDebug, paneOutput, DockType.Bottom);
paneDebug.DockHeight = new GridLength(150, GridUnitType.Pixel);
См. также:
Другие примеры:
Доступ к родителю и дочерним элементам элемента закрепления¶
Свойство DockPane.DockParent
позволяет получить непосредственного родителя любого элемента закрепления (панели или контейнера). Например, когда панель находится в контейнере разделения (DockGroup
), DockPane.DockParent
возвращает этот контейнер разделения. Для панелей, объединённых в контейнере вкладок, DockPane.DockParent
возвращает этот родительский контейнер вкладок (объект TabbedGroup
или DocumentGroup
).
Чтобы получить непосредственные дочерние элементы контейнера закрепления, используйте его свойство Items
.
См. также: Доступ к панелям и контейнерам закрепления.
Пример - Доступ к родителю и установка его размера¶
Следующий код создаёт интерфейс закрепления, состоящий из трёх панелей. В примере задаётся относительная ширина для панели 'Properties' и контейнера вертикального разделения, объединяющего панели 'Output' и 'Debug'.
DockPane paneProperties = new DockPane() { Header = "Properties" };
DockPane paneDebug = new DockPane() { Header = "Debug" };
DockPane paneOutput = new DockPane() { Header = "Output" };
dockManager1.Root = new DockGroup();
dockManager1.Root.Add(paneProperties);
dockManager1.Dock(paneDebug, paneProperties, DockType.Right);
dockManager1.Dock(paneOutput, paneDebug, DockType.Top);
paneProperties.DockWidth = new GridLength(1, GridUnitType.Star);
paneDebug.DockParent.DockWidth = new GridLength(2, GridUnitType.Star);
Закрытие панелей¶
Метод DockManager.Close
позволяет временно скрыть панель или контейнер. Этот метод вызывается, когда пользователь закрывает панель, нажимая кнопку 'Закрыть' ('x').
При вызове для контейнера (группы) метод Close
скрывает все панели этого контейнера.
К закрытым панелям можно получить доступ из коллекции DockManager.ClosedPanes
.
Используйте свойство DockPane.AllowClose
, чтобы скрыть кнопку 'Закрыть' для панели и, таким образом, предотвратить закрытие панели с помощью этой кнопки. Эта опция не предотвращает закрытие панели с помощью метода DockManager.Close
.
При закрытии панели активируется команда DockPane.CloseCommand
.
Удаление панелей¶
Вы можете использовать метод DockManager.Remove
для удаления панели из DockManager
. Этот метод не освобождает ресурсы панели и её содержимого.
DockManager
не хранит ссылки на удалённые панели.
Объединение панелей в контейнере вкладок¶
Вы можете объединять панели в контейнере вкладок (TabGroup
). Для этой цели используйте следующую перегрузку метода DockManager.Dock
:
Параметр target
может быть панелью или существующим контейнером вкладок.
Параметр dockType
определяет способ закрепления панели. Установите этот параметр в DockType.Fill
, чтобы объединить панели в интерфейсе с вкладками.
Когда вы закрепляете объект DockPane
в другом объекте DockPane
, создаётся контейнер TabGroup
. Контейнер DocumentGroup
создаётся, когда вы закрепляете DocumentPane
в другом объекте DocumentPane
.
Вы также можете использовать метод Add
контейнера вкладок, чтобы добавить новый элемент в качестве вкладки.
Пример - Создание контейнера вкладок¶
Следующий код использует метод DockManager.Dock
для создания контейнера вкладок из двух панелей.
dockManager1.Root = new DockGroup();
DockPane paneDebug = new DockPane()
{
Header = "Debug",
DockWidth = new GridLength(250, GridUnitType.Pixel)
};
dockManager1.Root.Add(paneDebug);
DockPane paneOutput = new DockPane() { Header = "Output" };
dockManager1.Dock(paneOutput, paneDebug, DockType.Fill);
Доступ к контейнеру вкладок¶
Чтобы получить родительский контейнер вкладок для панели, используйте свойство DockParent
панели.
См. также: Доступ к панелям и контейнерам закрепления.
Управление автоматически скрываемыми панелями¶
Автоматически скрываемые панели изначально свёрнуты. Пользователь может нажать кнопку панели, чтобы развернуть её.
Создание автоматически скрываемой панели¶
Используйте метод DockManager.AutoHide
, чтобы включить функциональность автоматического скрытия для панели в коде. Этот метод скрывает панель в её текущей или предыдущей позиции закрепления.
Когда панель собирается стать автоматически скрываемой, создаётся контейнер AutoHideGroup
, и панель перемещается в этот контейнер.
Вы можете вызвать метод DockManager.AutoHide
для контейнера TabGroup
. В этом случае все панели контейнера вкладок становятся автоматически скрываемыми.
Пример - Автоматическое скрытие контейнеров вкладок¶
Следующий код создаёт два контейнера вкладок у правого края DockManager
, а затем включает функциональность автоматического скрытия для этих контейнеров вкладок. В результате создаются два контейнера AutoHideGroup
, каждый из которых отображает панели из соответствующего контейнера вкладок.
dockManager1.Root = new DockGroup();
dockManager1.Root.Add(new DocumentGroup());
DockPane paneDebug = new DockPane() { Header = "Debug" };
dockManager1.Root.Add(paneDebug);
DockPane paneOutput = new DockPane() { Header = "Output" };
// Create a tab container that combines the 'Debug' and 'Output' panels
dockManager1.Dock(paneOutput, paneDebug, DockType.Fill);
DockPane paneTasks = new DockPane() { Header = "Tasks" };
dockManager1.Root.Add(paneTasks);
DockPane paneExplorer = new DockPane() { Header = "Explorer" };
//Create a tab container that combines the 'Tasks' and 'Explorer' panels
dockManager1.Dock(paneExplorer, paneTasks, DockType.Fill);
//Auto-hide the tab containers
dockManager1.AutoHide(paneDebug.DockParent);
dockManager1.AutoHide(paneTasks.DockParent);
Восстановление панели из автоматически скрытого состояния¶
Используйте перегрузку метода DockManager.Dock(DockItemBase item)
, чтобы восстановить панель из автоматически скрытого состояния в её предыдущую позицию закрепления.
Вы также можете использовать перегрузку Dock(DockItemBase item, DockItemBase target, DockType dockType)
, чтобы восстановить автоматически скрытую панель, одновременно перемещая её в определённую позицию в макете.
Отображение и свёртывание автоматически скрываемой панели¶
Методы DockManager.ExpandAutoHidePanel
и DockManager.CollapseAutoHidePanel
позволяют отображать и сворачивать автоматически скрываемую панель. Свойство DockPane.IsActive
позволяет сфокусироваться на любой панели. Для автоматически скрываемой панели это свойство разворачивает панель (если она свёрнута), а затем фокусируется на ней.
Доступ к автоматически скрываемым панелям¶
Вы можете использовать коллекцию DockManager.AutoHideGroups
для доступа ко всем существующим контейнерам AutoHideGroup
. Свойство AutoHideGroup.Items
позволяет получить все автоматически скрываемые панели, отображаемые в конкретном контейнере.
Чтобы получить родительский контейнер для автоматически скрываемой панели, см. свойство DockPane.AutoHideGroup
.
См. также: Доступ к панелям и контейнерам закрепления.
Управление плавающими панелями¶
Создание плавающих панелей¶
Используйте метод DockManager.Float
, чтобы сделать панель плавающей в коде. Когда вы делаете панель плавающей, она перемещается в контейнер FloatGroup
(плавающее окно). Свойство DockPane.FloatGroup
плавающей панели позволяет получить доступ к родительскому плавающему окну и задать его границы (см. FloatGroup.FloatLocation
, FloatGroup.FloatWidth
и FloatGroup.FloatHeight
).
DockPane paneTasks = new DockPane() { Header = "Tasks" };
dockManager1.Float(paneTasks);
// Set the floating window's bounds
paneTasks.FloatGroup.FloatLocation = new Avalonia.PixelPoint(200, 200);
paneTasks.FloatGroup.FloatWidth = 300;
paneTasks.FloatGroup.FloatHeight = 200;
Если панель является плавающей, вы можете закрепить другую панель рядом с ней и таким образом создать плавающий контейнер.
DockPane paneTasks = new DockPane() { Header = "Tasks" };
dockManager1.Float(paneTasks);
DockPane paneExplorer = new DockPane() { Header = "Explorer" };
dockManager1.Dock(paneExplorer, paneTasks, DockType.Right);
Доступ к плавающим панелям¶
Коллекция DockManager.FloatGroups
позволяет получить существующие плавающие окна (объекты FloatGroup
). Используйте свойство FloatGroup.Items
, чтобы получить список панелей, отображаемых в каждом плавающем окне.
См. также: Доступ к панелям и контейнерам закрепления.
Доступ к панелям и контейнерам закрепления¶
Следующий список суммирует свойства и методы, которые вы можете использовать для доступа к панелям и группам (контейнерам) закрепления.
- Метод расширения
GetItems
DockManager — Возвращает линейный список всех закреплённых, автоматически скрываемых и закрытых панелей и групп. - Метод расширения
FindItem
DockManager — Возвращает элемент по имени. DockGroup.Items
— Получает список непосредственных дочерних элементов контейнера.DockPane.DockParent
— Получает непосредственного родителя элемента закрепления.DockPane.FloatGroup
— Возвращает плавающее окно, в котором находится панель в плавающем состоянии.DockPane.AutoHideGroup
— Возвращает контейнерAutoHideGroup
, в котором находится панель в автоматически скрытом состоянии.DockManager.Root
— Возвращает корневую группу (контейнер), которая отображает все закреплённые панели и контейнеры.DockManager.FloatGroups
— Получает коллекцию существующих объектовFloatGroup
(плавающих окон).DockManager.AutoHideGroups
— Получает коллекцию существующих объектовAutoHideGroup
.DockManager.ClosedPanes
— Возвращает коллекцию закрытых панелей.
Управление операциями закрепления¶
Если вам требуется гибкий контроль над операциями закрепления, выполняемыми пользователями, вы можете обрабатывать следующие события:
DockManager.DockOperationStarting
— Срабатывает, когда операция закрепления вот-вот начнётся.DockManager.DockOperationCompleted
— Срабатывает после завершения операции закрепления.DockManager.DockItemActivated
— Срабатывает после активации элемента закрепления.DockManager.DockItemStartFloatDragging
— Срабатывает, когда панель становится плавающей или плавающее окно вот-вот будет перемещено.DockManager.DockItemEndFloatDragging
— Срабатывает после завершения перетаскивания плавающего окна.
Пример - Запрет закрытия панели¶
Следующий обработчик события DockManager.DockOperationStarting
не позволяет закрыть панель 'Output', когда пользователь нажимает кнопку 'Закрыть' ('x') панели.
private void DockManager1_DockOperationStarting(object? sender, DockOperationStartingEventArgs e)
{
if(e.Item is DockPane pane)
{
e.Cancel = e.DockOperation == DockOperation.Close && pane.Header == "Output";
}
}
* Эта страница была переведена с помощью нейросети Deepseek.