Files
Lattice/Lattice.Core/README.md

3.1 KiB
Raw Blame History

Lattice.Core

Framework Author Platform

Lattice.Core — это платформонезависимое ядро (Layout Engine) для построения сложных интерфейсов с системой докинга в стиле Visual Studio 2026.

Библиотека является частью экосистемы Lattice и отвечает исключительно за математику макета, управление деревом узлов и контекстное состояние, не имея зависимостей от конкретных UI-фреймворков.

🚀 Особенности

  • Агностическая архитектура: Полная совместимость с .NET 8+, WinUI 3 и Uno Platform.
  • Древовидная компоновка: Управление интерфейсом через узлы (Split и Content).
  • Context-Aware System: Встроенный сервис отслеживания контекста для динамического переключения панелей инструментов.
  • Smart Docking: Алгоритмы автоматического разделения зон и схлопывания пустых контейнеров.
  • JSON Persistence: Полиморфная сериализация макетов для сохранения и загрузки состояний пользователя.

📁 Структура проекта

  • Abstractions/ — Интерфейсы для расширения системы.
  • Models/ — Базовые сущности дерева (узлы, направления, ориентация).
  • Services/ - Сервисы управления интерфейсом
    • ContextService - Сервис управления контекстом приложения.
    • LayoutService - Сервис управления макетом.
    • NotificationService - Сервис уведомлений.
  • Persistence/ — Логика сохранения макета в JSON.

🛠 Использование

Создание базового макета

var layoutService = new LayoutService();

// Создаем контентные узлы
var explorer = new ContentNode(new MyToolComponent("Solution Explorer", "Explorer"));
var editor = new ContentNode(new MyDocumentComponent("Main.cs", "CodeEditor"));

// Устанавливаем редактор как корень
layoutService.SetRoot(editor);

// Прикрепляем проводник слева от редактора
layoutService.Dock(explorer, editor, DockDirection.Left);

//Переключение контекста
var contextService = new ContextService();

// Вызывается при активации вкладки в UI
contextService.SetContext("CodeEditor");

// Проверка видимости команд в текущем контексте
bool isDebugVisible = contextService.IsCommandVisible("btnDebug", "CodeEditor");