Выделение отдельных сервисов

This commit is contained in:
2026-01-08 00:00:50 +03:00
parent c3770c789b
commit 9ea82af329
8 changed files with 35 additions and 33 deletions

View File

@@ -14,26 +14,26 @@ public class LatticeDockHost : Control
public DockAnchorOverlay? AnchorOverlay => GetTemplateChild("AnchorOverlay") as DockAnchorOverlay;
/// <summary>
/// Определяет свойство зависимости для LayoutManager.
/// Определяет свойство зависимости для LayoutService.
/// </summary>
public static readonly DependencyProperty ManagerProperty =
DependencyProperty.Register(nameof(Manager), typeof(ILayoutService), typeof(LatticeDockHost), new PropertyMetadata(null, OnManagerChanged));
public static readonly DependencyProperty ServiceProperty =
DependencyProperty.Register(nameof(Service), typeof(ILayoutService), typeof(LatticeDockHost), new PropertyMetadata(null, OnServiceChanged));
/// <summary>
/// Сервис управления макетом, привязанный к данному хосту.
/// </summary>
public ILayoutService? Manager
public ILayoutService? Service
{
get => (ILayoutService?)GetValue(ManagerProperty);
set => SetValue(ManagerProperty, value);
get => (ILayoutService?)GetValue(ServiceProperty);
set => SetValue(ServiceProperty, value);
}
/// <summary>
/// Указывает конкретный узел, который должен стать корнем для этого хоста.
/// Если null — используется Manager.Root.
/// Если null — используется Service.Root.
/// </summary>
public static readonly DependencyProperty RootNodeProperty =
DependencyProperty.Register(nameof(RootNode), typeof(LayoutNode), typeof(LatticeDockHost), new PropertyMetadata(null, OnManagerChanged));
DependencyProperty.Register(nameof(RootNode), typeof(LayoutNode), typeof(LatticeDockHost), new PropertyMetadata(null, OnServiceChanged));
public LayoutNode? RootNode
{
@@ -46,7 +46,7 @@ public class LatticeDockHost : Control
this.DefaultStyleKey = typeof(LatticeDockHost);
}
private static void OnManagerChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
private static void OnServiceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is LatticeDockHost host)
{
@@ -86,8 +86,8 @@ public class LatticeDockHost : Control
{
if (this.GetTemplateChild("LayoutPresenter") is ContentPresenter presenter)
{
// Приоритет: сначала проверяем локальный RootNode, затем глобальный Manager.Root
var effectiveRoot = RootNode ?? Manager?.Root;
// Приоритет: сначала проверяем локальный RootNode, затем глобальный Service.Root
var effectiveRoot = RootNode ?? Service?.Root;
if (effectiveRoot != null)
{

View File

@@ -10,15 +10,15 @@ namespace Lattice.UI.Controls;
/// </summary>
public class LatticeFloatingWindowHost
{
private readonly ILayoutService _manager;
private readonly ILayoutService _service;
/// <summary>
/// Инициализирует хост плавающих окон.
/// </summary>
/// <param name="manager">Общий менеджер макета приложения.</param>
public LatticeFloatingWindowHost(ILayoutService manager)
/// <param name="service">Общий менеджер макета приложения.</param>
public LatticeFloatingWindowHost(ILayoutService service)
{
_manager = manager;
_service = service;
}
/// <summary>
@@ -33,7 +33,7 @@ public class LatticeFloatingWindowHost
// Создаем и настраиваем хост докинга для нового окна
var host = new LatticeDockHost
{
Manager = _manager, // Передаем общий менеджер, чтобы дерево было синхронизировано
Service = _service, // Передаем общий менеджер, чтобы дерево было синхронизировано
RootNode = node, // Указываем хосту отображать ТОЛЬКО этот узел
};

View File

@@ -89,8 +89,8 @@ public class LatticeSplitter : Control
{
// Вызываем метод перерисовки (в Core это может быть событие LayoutUpdated)
// В нашем случае это заставит LayoutPanel пересчитать Column/Row Definitions
host.Manager?.Dock(null!, null!, DockDirection.Center); // Фиктивный вызов для обновления
// Или если есть прямой доступ: host.Manager.InvokeLayoutUpdated();
host.Service?.Dock(null!, null!, DockDirection.Center); // Фиктивный вызов для обновления
// Или если есть прямой доступ: host.Service.InvokeLayoutUpdated();
break;
}
parent = VisualTreeHelper.GetParent(parent);