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

182 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# **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**
```xml
<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**
```csharp
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**
```xml
<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**
```csharp
public sealed partial class MainWindow : LatticeStudioWindow
{
public MainWindow()
{
InitializeComponent();
Title = "My App";
Initialize(); // стандартные сервисы
}
}
```
---
## 🧩 Инициализация вручную
Если нужны свои сервисы:
```csharp
Initialize(layoutService, contextService, actions, notificationService);
```
Если нужен быстрый старт:
```csharp
Initialize();
```