50 lines
1.8 KiB
C#
50 lines
1.8 KiB
C#
using Lattice.Core.Abstractions;
|
|
using Lattice.Core.Models;
|
|
using Microsoft.UI.Windowing;
|
|
using Microsoft.UI.Xaml;
|
|
|
|
namespace Lattice.UI.Controls;
|
|
|
|
/// <summary>
|
|
/// Обеспечивает поддержку выноса панелей в отдельные нативные окна Windows (Floating Windows).
|
|
/// </summary>
|
|
public class LatticeFloatingWindowHost
|
|
{
|
|
private readonly ILayoutService _manager;
|
|
|
|
/// <summary>
|
|
/// Инициализирует хост плавающих окон.
|
|
/// </summary>
|
|
/// <param name="manager">Общий менеджер макета приложения.</param>
|
|
public LatticeFloatingWindowHost(ILayoutService manager)
|
|
{
|
|
_manager = manager;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Создает новое окно Windows для конкретного узла макета.
|
|
/// </summary>
|
|
/// <param name="node">Узел (панель), который нужно вынести в отдельное окно.</param>
|
|
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();
|
|
}
|
|
}
|