Files
Lattice/Lattice.Studio
2026-01-07 23:54:00 +03:00
..
2026-01-07 23:54:00 +03:00
2026-01-07 23:54:00 +03:00
2026-01-07 23:54:00 +03:00
2026-01-07 23:54:00 +03:00

Lattice.Studio

Lattice.Studio — это модуль, предоставляющий готовую визуальную оболочку для приложений на WinUI 3, оформленную в стиле Visual Studio 2026.
Он включает:

  • нативный Windows 11 TitleBar,
  • слот для меню,
  • контекстный тулбар,
  • область уведомлений,
  • хост для докинга,
  • статус‑бар,
  • тему оформления (Dark/Light),
  • и главное — готовое окно верхнего уровня LatticeStudioWindow.

LatticeStudioShell служит визуальным контейнером, а LatticeStudioWindow — удобной точкой входа для реальных приложений.


📦 Состав модуля

1. LatticeStudioShell.xaml

Определяет визуальную структуру IDEоболочки:

  • TitleBar:
    • заголовок,
    • иконка (IconSource),
    • слот для меню (MenuContent),
    • dragregion.
  • LatticeContextualToolbar — контекстный тулбар.
  • NotificationArea — стек уведомлений.
  • LatticeDockHost — хост для системы докинга.
  • StatusContent — слот для статус‑бара.

2. LatticeStudioShell.xaml.cs

Реализует логику оболочки:

  • интеграция с сервисами:
    • ILayoutService,
    • IContextService,
    • INotificationService;
  • обновление тулбара при смене контекста;
  • отображение уведомлений через InfoBar;
  • настройка окна:
    • ExtendsContentIntoTitleBar,
    • кастомный TitleBar,
    • Mica Alt backdrop.

3. LatticeStudioWindow.xaml / .cs

Готовое окно верхнего уровня:

  • содержит LatticeStudioShell,
  • проксирует его свойства наружу:
    • Title,
    • Subtitle,
    • MenuContent,
    • StatusContent,
    • TitleBarIcon,
  • предоставляет удобный метод инициализации:
    • Initialize(...)с пользовательскими сервисами,
    • Initialize()со стандартными реализациями.

Используется как базовый класс для MainWindow.

4. Themes/StudioThemes.xaml

Содержит тему оформления:

  • цвета панелей,
  • цвета заголовков,
  • акцентные цвета,
  • поддержка Light/Dark.

Возможности

  • Готовая IDEоболочка для WinUI 3.
  • Интеграция с Lattice.Core:
    • докинг,
    • контексты,
    • команды.
  • Нативный Windows 11 TitleBar.
  • Встроенная система уведомлений.
  • Слоты для меню и статус‑бара.
  • Тема в стиле Visual Studio 2026.
  • Готовое окно LatticeStudioWindow для быстрого старта.

🚀 Быстрый старт

🅰 Вариант 1 — минимальный XAML (всё в C#)

MainWindow.xaml

<studio:LatticeStudioWindow
    x:Class="MyApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:studio="using:Lattice.Studio.Controls">
</studio:LatticeStudioWindow>

MainWindow.xaml.cs

public sealed partial class MainWindow : LatticeStudioWindow
{
    public MainWindow()
    {
        InitializeComponent();

        Title = "My App";

        MenuContent = BuildMenu();
        StatusContent = new TextBlock { Text = "Ready" };

        Initialize(); // стандартные сервисы
    }
}

🅱 Вариант 2 — декларативный XAML (меню/статус‑бар в XAML)

MainWindow.xaml

<studio:LatticeStudioWindow
    x:Class="MyApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:studio="using:Lattice.Studio.Controls">

    <studio:LatticeStudioWindow.MenuContent>
        <MenuBar>
            <MenuBarItem Title="File">
                <MenuFlyoutItem Text="New" />
                <MenuFlyoutItem Text="Open" />
                <MenuFlyoutSeparator />
                <MenuFlyoutItem Text="Exit" />
            </MenuBarItem>
        </MenuBar>
    </studio:LatticeStudioWindow.MenuContent>

    <studio:LatticeStudioWindow.StatusContent>
        <TextBlock Text="Ready" Margin="8,0"/>
    </studio:LatticeStudioWindow.StatusContent>

</studio:LatticeStudioWindow>

MainWindow.xaml.cs

public sealed partial class MainWindow : LatticeStudioWindow
{
    public MainWindow()
    {
        InitializeComponent();
        Title = "My App";
        Initialize(); // стандартные сервисы
    }
}

🧩 Инициализация вручную

Если нужны свои сервисы:

Initialize(layoutService, contextService, actions, notificationService);

Если нужен быстрый старт:

Initialize();