AI Windows — окна Blazor
AI-ориентированная карта API для оконного фреймворка Blazor и хостинга окон.
Карта по Blazor Windows
Справочная карта по нативным окнам на Blazor, хостам WebView2, диалоговым окнам, разрешению Razor view, кастомным title bar и автоматизации окон.
Для desktop-аннотаций с click-through используйте osd/screen-overlay.md, а для
опциональных ImGui-окон — nuget/imgui-sdk.md.
Типовые задачи
- Открыть диалоговое окно на Razor/Blazor, которым владеет скрипт.
- Встроить Razor-компонент в нативное окно.
- Понять, чем
C# Overlayотличается от Blazor-окна, созданного скриптом. - Настроить размер, позицию, owner, прозрачность, topmost, no-activate или click-through поведение.
- Получить доступ к родительскому окну изнутри Razor-компонента.
- Зарегистрировать или разрешить Razor view по DataContext.
- Открыть WebView DevTools.
- Подгрузить CSS/JavaScript/assets в размещённый WebView.
- Использовать реактивные Razor-компоненты для переключателей и UI, доступного из скрипта.
- Открывать сложные окна редакторов и инструментов из большого script app.
Как это устроено
IBlazorWindow— нативное WPF/WinForms-окно, которое хостит Blazor-контент.ViewType— тип Razor-компонента.DataContextпередаётся в размещённый view.IBlazorWindowControllerуправляет состоянием окна и операциями с ним.IBlazorWindowNativeControllerотвечает за native handle и операции с прямоугольником окна.IBlazorWindowAccessorдаёт доступ к родительскому окну изнутри компонента.BlazorContentPresenterразрешает динамический контент компонента.- WebView2 — встроенный браузер, который рендерит Razor/HTML/CSS/JS-поверхность.
C# Overlay— это заранее настроенная Blazor-поверхность, размещённая скриптом и управляемая настройками overlay у ауры.- Blazor-окно, созданное скриптом, открывается явно через код скрипта или app.
- Blazor windows — это нативные окна; для click-through-аннотаций поверх экрана используйте карты OSD/screen-overlay.
Основные API
IBlazorWindow— основной контракт окна;Show,ShowDialog,Close,ShowDevTools,ViewType,DataContext,Container.IBlazorWindowController— свойства внешнего вида и поведения окна.IBlazorWindowNativeController—GetWindowHandle,GetWindowRect,SetWindowRect.IDialogWindowUnstableScriptingApi— script-facing helper для диалоговых окон.IBlazorWindowAccessor— внедряемый accessor к родительскому окну.IBlazorViewRepository,IBlazorViewRegistrator,BlazorViewAttribute— разрешение view по DataContext.BlazorReactiveComponent/BlazorReactiveComponent<T>— общая база для реактивных Razor-компонентов.IJsPoeBlazorUtils.LoadCss(...)— загрузка CSS в WebView во время выполнения.IJsPoeBlazorUtils.LoadScript(...)— загрузка обычного JavaScript в WebView во время выполнения.HeadContent— декларативный способ Blazor добавить CSS и содержимое в head.ToggleButton— переиспользуемый двухсостоянийный Blazor-контрол кнопки из PoeShared.ScriptBlazorWindowConfigurator— точка интеграции script-window, которая подключает file providers/resources скрипта к окнам.
Практические моменты
- Файлы Razor-компонентов — это обычные файлы проекта, и у них может быть
.razor.cscode-behind. - Для окон, создаваемых скриптом, проще всего использовать public-классы Razor-компонентов.
- Компоненты должны использовать dependency injection, parameters и
DataContext; члены верхнеуровневого script host не являются глобальными переменными компонента. DataContext— основной способ передать view-model или service object в размещённый компонент.IBlazorWindowAccessor— способ для компонента получить доступ к родительскому нативному окну.ShowDevTools()открывает инструменты разработчика WebView и полезен для отладки CSS/JS.- CSS можно писать inline, подключать декларативно через
HeadContentили загружать программно черезLoadCss. - JavaScript можно загружать через
LoadScript; JS в стиле модулей работает по обычным правилам Blazor/JS interop. - Embedded resources скрипта доступны Blazor-окнам по относительному пути.
- Если у вас несколько toggles или повторяющихся контролов, лучше использовать явные свойства или item view-models, а не копировать и вставлять жёстко прописанные accessors.
Типовые сценарии
Диалоговое окно, которым владеет скрипт
- Создайте или получите scripting API для dialog window в верхнеуровневом скрипте или в коде композиции app.
- Создайте окно для типа Razor-компонента.
- Передайте
DataContext, если компоненту нужна view-model. - До показа настройте стартовую позицию, размер, прозрачность или поведение.
- Привяжите окно к lifetime владельца, чтобы оно закрывалось при остановке скрипта или app.
UI через C# Overlay
- Создайте элемент ауры
C# Overlay. - Поместите код Razor/CSS/JS/компонентов в проект скрипта overlay.
- Используйте настройки overlay для позиции, стиля, прозрачности и режима window-vs-overlay.
- Используйте live import/export для быстрой итерации по UI.
Загрузка ресурсов
- Добавьте CSS/JS/изображения как embedded resources в проект скрипта.
- Ссылайтесь на изображения и видео из Razor по относительному пути.
- Используйте
HeadContentдля декларативного CSS илиLoadCss, если момент загрузки должен контролироваться кодом. - Используйте
LoadScriptдля обычных JavaScript-файлов или URL.
Что предпочесть
- Для диалоговых окон, которыми владеет скрипт, предпочитайте
IDialogWindowUnstableScriptingApi. - Внутри размещённых компонентов предпочитайте
IBlazorWindowAccessor. - Если компоненту нужны helpers для реактивного обновления, предпочитайте
BlazorReactiveComponent. - Для нетривиальных компонентов предпочитайте
DataContext/view-models. - Для CSS/JS/изображений, которые поставляются вместе с mini-app, предпочитайте embedded resources и относительные пути.
- Если Blazor windows — часть большого script app с корнем на ImGui,
предпочитайте
recipes/bot-memory-imgui-interface.md. - Для рисования поверх desktop предпочитайте
osd/screen-overlay.md. - Для инструментов, завязанных на ImGui, предпочитайте
nuget/imgui-sdk.md.
Чего избегать
- Не создавайте вручную WPF/WinForms-shell для Razor-контента.
- Не меняйте прозрачность, заданную при создании, после того как нативное окно уже существует.
- Не предполагайте, что Razor-компонент может получить доступ к своему owner без accessor.
- Не предполагайте, что члены верхнеуровневого script host доступны напрямую в Razor-компонентах.
- Не выбирайте Blazor Windows как первый вариант для простых аннотаций поверх экрана; для этого используйте API из OSD/screen-overlay.
- Избегайте удалённых CSS/JS-зависимостей, если mini-app должен работать офлайн или быть переносимым.
Ключевые сущности для поиска
IBlazorWindow,IBlazorWindowController,IBlazorWindowNativeController,IDialogWindowUnstableScriptingApi,IBlazorWindowAccessor,BlazorContentPresenter,IBlazorViewRepository,BlazorViewAttribute,ShowDevTools,BlazorReactiveComponent,IJsPoeBlazorUtils,LoadCss,LoadScript,HeadContent,ToggleButton,ScriptBlazorWindowConfigurator.
Синонимы для поиска
- Blazor window
- Razor window
- script dialog
- WebView2 window
- C# Overlay
- hosted Razor component
- Razor code-behind
- HeadContent
- LoadCss
- LoadScript
- BlazorReactiveComponent
- ToggleButton
- custom title bar
- click-through window
- transparent window
- WebView DevTools
Связанные карты
osd/screen-overlay.mdrecipes/bot-memory-imgui-interface.mdnuget/imgui-sdk.mdscripting/project-workflow.mdscripting/references-and-resources.mdscripting/runtime.mdcore/app-runtime-contexts.md