Добавлен проект UI
This commit is contained in:
49
Lattice.UI/Controls/LatticeFloatingWindow.cs
Normal file
49
Lattice.UI/Controls/LatticeFloatingWindow.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user