Files
Lattice/Lattice.UI/Controls/LatticeFloatingWindow.cs

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();
}
}