using Lattice.Core.Abstractions;
using Lattice.Core.Models;
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
namespace Lattice.UI.Controls;
///
/// Обеспечивает поддержку выноса панелей в отдельные нативные окна Windows (Floating Windows).
///
public class LatticeFloatingWindowHost
{
private readonly ILayoutService _manager;
///
/// Инициализирует хост плавающих окон.
///
/// Общий менеджер макета приложения.
public LatticeFloatingWindowHost(ILayoutService manager)
{
_manager = manager;
}
///
/// Создает новое окно Windows для конкретного узла макета.
///
/// Узел (панель), который нужно вынести в отдельное окно.
public void CreateFromNode(LayoutNode node)
{
// Создаем новое окно WinUI 3
var newWindow = new Window();
// Создаем и настраиваем хост докинга для нового окна
var host = new LatticeDockHost
{
Manager = _manager, // Передаем общий менеджер, чтобы дерево было синхронизировано
RootNode = node, // Указываем хосту отображать ТОЛЬКО этот узел
};
newWindow.Content = host;
// Настройка нативного окна через AppWindow
AppWindow appWin = newWindow.AppWindow;
appWin.Title = node.Name;
// Показываем окно
newWindow.Activate();
}
}