четверг, 7 мая 2026 г.

Blazor, Hybrid

Blazor, Hybrid

ПРоекты MAUI - что это WEB или обычное Приложение WPF
Проекты .NET MAUI — это современные кроссплатформенные приложения, которые являются эволюцией Xamarin.Forms. [1, 2]
Это не WEB-ресурсы в классическом понимании, но они также отличаются от «обычных» WPF-приложений.
Главные отличия от WPF и WEB
  • Относительно WPF: В отличие от WPF, который работает только на Windows, MAUI позволяет создавать приложения для Windows, macOS, iOS и Android из единой кодовой базы. При этом интерфейс в MAUI тоже описывается на языке XAML, но его элементы управления отличаются от тех, что используются в WPF.
  • Относительно WEB: По умолчанию MAUI — это нативное приложение, которое устанавливается на устройство. Однако существует технология MAUI Blazor Hybrid, которая позволяет встраивать веб-интерфейс (HTML/CSS/C#) внутрь нативного приложения с помощью компонента WebView. [1, 2, 3, 4, 5]
Основные характеристики MAUI:
  • Нативность: Приложения используют нативные компоненты каждой операционной системы, что обеспечивает высокую производительность.
  • Единый код: Вы пишете логику и дизайн один раз, и они работают на мобильных телефонах, планшетах и компьютерах.
  • Современность: Это флагманское решение Microsoft для разработки интерфейсов, пришедшее на смену Xamarin и предлагающее более гибкую архитектуру, чем старые фреймворки. [1, 2, 3, 4, 5, 6]
Хотите узнать подробнее, как перенести существующий проект с WPF на MAUI или как работает гибридная модель с Blazor?
ИИ может ошибаться. Проверяйте его ответы.
Что такое .NET MAUI? - Microsoft Learn
Какие преимущества у десктопного или WEB Приложения MAUI по сравнению - с обычным приложением WPF - c обычным WEB Приложением RazorPAge, MVC - c обычным Blazor ----- ?
Выбор между .NET MAUI и другими технологиями зависит от того, нужны ли вам мобильные платформы, доступ к «железу» и высокая производительность.
Ниже приведен подробный разбор преимуществ MAUI в сравнении с популярными стеками разработки.
1. Сравнение с WPF (классический Desktop)
Если WPF — это стандарт для Windows, то MAUI — это современное развитие идей XAML с фокусом на мобильность. [1, 2]
  • Кроссплатформенность: Это главное преимущество. WPF работает только на Windows, а MAUI — на Windows, macOS, iOS и Android из одного проекта.
  • Современный UI: MAUI использует актуальные стили WinUI 3 для Windows и нативные компоненты для мобильных ОС, тогда как WPF выглядит более «старым» и требует больше усилий для создания современного дизайна.
  • Единые ресурсы: В MAUI изображения, шрифты и иконки управляются централизованно для всех платформ, что упрощает поддержку. [1, 2, 3, 4, 5]
Однако: WPF остается быстрее в работе с тяжелой графикой (DirectX) и имеет более зрелый инструментарий отладки для Windows. [1, 2]
2. Сравнение с Web (Razor Pages, MVC)
Традиционный Web (MVC/Razor) работает в браузере, а MAUI — это установленное приложение. [1, 2]
  • Доступ к API устройства: MAUI имеет полный доступ к камере, Bluetooth, датчикам, файловой системе и уведомлениям. Web-приложения сильно ограничены политиками безопасности браузеров.
  • Работа Offline: MAUI-приложения могут полноценно работать без интернета, сохраняя данные в локальную базу (например, SQLite), тогда как MVC-сайты требуют постоянного соединения.
  • Производительность интерфейса: Поскольку код выполняется локально на устройстве, отклик интерфейса (анимации, прокрутка) обычно плавнее, чем в браузере. [1, 2, 3, 4, 5]
3. Сравнение с обычным Blazor (WebAssembly / Server)
Blazor Hybrid в составе MAUI — это способ запустить веб-интерфейс «внутри» нативного приложения. [1, 2]
  • Полный доступ к системе: В отличие от Blazor WebAssembly, который изолирован в «песочнице» браузера, MAUI Blazor Hybrid может выполнять системные вызовы C# напрямую (например, работать с реестром Windows или системными службами).
  • Отсутствие проблем с загрузкой: Blazor WebAssembly часто долго загружается (скачивание runtime), в то время как MAUI Blazor запускается мгновенно, так как все файлы уже установлены на устройстве.
  • Переиспользование кода: Вы можете использовать одни и те же компоненты .razor для сайта (Blazor Web) и для мобильного/десктопного приложения (MAUI), экономя время на разработке UI. [1, 2, 3]
Сводная таблица преимуществ
Критерий.NET MAUIWPFBlazor WebRazor Pages / MVC
ПлатформыWin, Mac, iOS, AndroidТолько WindowsЛюбой браузерЛюбой браузер
Доступ к «железу»Полный (Native)ПолныйОграниченныйПочти нет
Offline-режимПолноценныйПолноценныйОграниченный (PWA)Нет
UI ТехнологияXAML или HTMLXAMLHTML / CSSHTML / CSS
РазвертываниеМагазины приложений / InstallerInstallerURL в браузереURL в браузере
Хотите, я составлю для вас план обучения для быстрого перехода с WPF на MAUI или покажу пример настройки Blazor Hybrid?
  • История C#: эволюция версий, .NET, Unity, Blazor, MAUI
    В 2022 году вышел Open Source фреймворк MAUI, который позволил разрабатывать как графический интерфейс пользователя (GUI), так и б...
    pvs-studio.ru
  • Что такое Blazor - Metanit
    Blazor предоставляет разработчикам следующие преимущества: Написание кода веб-приложений с помощью C# вместо JavaScript. Использов...
    Metanit
  • ASP.NET Core Blazor hosting models - Microsoft Learn
    11 нояб. 2025 г. — The Blazor Hybrid hosting model offers several benefits: * Reuse existing components that can be shared across mobile, desktop, an...
    Microsoft Learn
Показать все
Что такое Blazor Hybrid ?
Blazor Hybrid — это технология, которая позволяет объединить мир веб-разработки и нативных приложений. Если просто: вы берете веб-интерфейс (написанный на HTML, CSS и C# с использованием компонентов Razor) и «упаковываете» его в нативную оболочку .NET MAUI. [1, 2]
Как это работает?
Вместо того чтобы отрисовывать элементы интерфейса через XAML (как в обычном WPF или MAUI), приложение использует специальный компонент BlazorWebView. Этот компонент создает внутри приложения область браузера, в которой отображается ваш веб-интерфейс. [1, 2, 3]
При этом код выполняется не в браузере, а непосредственно на устройстве в том же процессе, что и само приложение. [1, 2]
Ключевые особенности Blazor Hybrid:
  • Доступ к «железу»: В отличие от обычного сайта, ваше веб-окно имеет полный доступ к файловой системе, камере, Bluetooth и другим датчикам устройства через API .NET MAUI.
  • Единый UI для всех: Вы можете использовать одни и те же Razor-компоненты и для обычного сайта, и для Windows-приложения, и для мобильной версии на Android/iOS.
  • Никакого WebAssembly (WASM): Код компилируется в нативные инструкции процессора. Это означает, что приложению не нужно скачивать громоздкую среду выполнения при запуске — оно работает быстро и мгновенно.
  • Прямые вызовы C#: Ваш UI может вызывать методы C# напрямую, без необходимости использовать HTTP-запросы или API, как это делает обычный фронтенд. [1, 2, 3, 4, 5, 6, 7, 8]
Зачем это нужно?
Это идеальный выбор, если:
  1. У вас уже есть команда веб-разработчиков (HTML/CSS), но вам нужно выпустить нативное приложение.
  2. Вы хотите использовать одну библиотеку компонентов UI для сайта и всех приложений.
  3. Вам не нравится XAML, но вы хотите создавать приложения для десктопа и мобилок на языке C#. [1, 2, 3, 4]
Хотите взглянуть на пример кода, чтобы увидеть, насколько просто Razor-компонент встраивается в MAUI?
  • Build a .NET MAUI Blazor Hybrid app | Microsoft Learn
    11 нояб. 2025 г. — Microsoft Build 2026 * Spots filling fast. Microsoft Build. Build, ship, and scale with AI-first tools and platforms. * Spots fill...
    Microsoft Learn
  • Blazor Hybrid Web Apps with .NET MAUI - CODE Magazine
    26 дек. 2025 г. — Bringing Blazor to the Desktop. Using Blazor for client-side Web UI with . NET is a fantastic solution, but sometimes full access ...
    CODE Magazine
  • Blazor and .NET MAUI: A Powerful Combination for Hybrid Apps
    3 апр. 2023 г. — What are . NET MAUI Blazor Hybrid Apps? . NET MAUI Blazor hybrid apps are a new type of application that combines the power of Bla...
    Grial UI Kit
Показать все
"Хотите взглянуть на пример кода, чтобы увидеть, насколько просто Razor-компонент встраивается в MAUI?" ДАвайте попробуем
Чтобы создать Blazor Hybrid приложение, вам нужно выполнить три простых шага. Основная магия происходит в файле разметки MAUI, где мы подключаем «веб-окно».
1. Создаем Razor-компонент
Это обычный веб-файл (например, Counter.razor), который содержит HTML-разметку и логику на C#.
razor
@* Файл: Views/Counter.razor *@
<h1>Счетчик Blazor</h1>

<p role="status">Текущее значение: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Нажми меня</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}
Используйте код с осторожностью.
2. Встраиваем его в главную страницу MAUI
В файле MainPage.xaml (где обычно пишется XAML) мы просто указываем, какой компонент Blazor запустить.
xml
<!-- Файл: MainPage.xaml -->
<ContentPage xmlns="http://microsoft.com"
             xmlns:x="http://microsoft.com"
             xmlns:local="clr-namespace:MyMauiApp"
             xmlns:blazor="clr-namespace:Microsoft.AspNetCore.Components.WebView.Maui;assembly=Microsoft.AspNetCore.Components.WebView.Maui"
             x:Class="MyMauiApp.MainPage">

    <!-- Это "окно" в мир веба внутри нативного приложения -->
    <blazor:BlazorWebView HostPage="wwwroot/index.html">
        <blazor:BlazorWebView.RootComponents>
            <blazor:RootComponent Selector="#app" ComponentType="{x:Type local:Views.Counter}" />
        </blazor:BlazorWebView.RootComponents>
    </blazor:BlazorWebView>
    
</ContentPage>
Используйте код с осторожностью.
3. Регистрация в сервисах
В файле MauiProgram.cs нужно просто разрешить использование инструментов разработчика и WebView.
csharp
public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); });

    // Добавляем поддержку Blazor WebView
    builder.Services.AddMauiBlazorWebView();

#if DEBUG
    builder.Services.AddBlazorWebViewDeveloperTools(); // Позволяет нажать F12 и отлаживать UI как в браузере
#endif

    return builder.Build();
}
Используйте код с осторожностью.
В чем здесь «фокус»?
  1. Кнопка — это HTML-элемент <button>.
  2. Стиль — это обычный CSS (например, Bootstrap).
  3. Логика — это чистый C#. При клике на кнопку в Android-приложении или в Windows-окне сработает ваш метод IncrementCount, и интерфейс обновится мгновенно.
Интересно ли вам узнать, как из этого Razor-компонента обратиться к папке с документами на компьютере или включить фонарик на телефоне?
ПРавильно лм я понял что BlAazor Hybrid - это: 1. UI - от Balzor (компоненты razor) 2. Работает как нативное Приложение с доступом ко всем Ресурсам OC Desktop ?
Да, вы поняли абсолютно верно! Вы уловили самую суть.
Если резюмировать по вашим пунктам:
  1. UI от Blazor: Вы используете привычный стек (HTML + CSS + Razor-компоненты). Весь интерфейс рисуется внутри нативного контейнера, но выглядит и ведет себя как современный веб-сайт. Вы можете даже взять готовую библиотеку UI (например, MudBlazor или AntDesign) и она будет работать в вашем десктопном приложении.
  2. Доступ к ресурсам ОС: Это ключевое отличие от обычного браузера. Поскольку код C# выполняется напрямую в среде .NET на устройстве, а не в «песочнице» браузера, вам доступны:
    • Прямая работа с файловой системой (чтение/запись любых файлов).
    • Работа с реестром Windows.
    • Управление процессами ОС.
    • Доступ к портам (USB, COM, Serial Port).
    • Работа с системными службами.
Почему это круто для разработчика?
Представьте, что вы пишете метод в Razor-компоненте:
csharp
private void SaveFile()
{
    // В обычном Blazor Web вы бы предлагали скачать файл через браузер.
    // В Blazor Hybrid вы просто пишете:
    System.IO.File.WriteAllText("C:\\MyFolder\\log.txt", "Привет из Blazor!");
}
Используйте код с осторожностью.
Этот код сработает без каких-либо ограничений, как если бы это было старое доброе консольное приложение или WPF.
Хотите попробовать написать небольшой пример кода, который получает список дисков компьютера или модель процессора и выводит это в веб-интерфейс?
"Хотите попробовать написать небольшой пример кода, который получает список дисков компьютера или модель процессора и выводит это в веб-интерфейс?" -------------------- Давайте попробуем
Для этого примера мы создадим простой Razor-компонент, который использует стандартные системные библиотеки .NET (System.IO и System.Management).
Вот как будет выглядеть ваш компонент, объединяющий веб-интерфейс и прямой доступ к Windows:
Файл SystemInfo.razor
razor
@using System.IO
@* Для получения данных о процессоре в Windows удобно использовать WMI *@
@using System.Management 

<div style="padding: 20px; font-family: sans-serif;">
    <h3>Системная информация (Native Access)</h3>

    <button class="btn btn-primary" @onclick="GetSystemData">Обновить данные</button>

    <div style="margin-top: 20px;">
        <h4>Список дисков:</h4>
        <ul>
            @foreach (var drive in drives)
            {
                <li>
                    <strong>@drive.Name</strong> — @drive.DriveType 
                    (Свободно: @(drive.TotalFreeSpace / 1024 / 1024 / 1024) ГБ)
                </li>
            }
        </ul>
    </div>

    <div style="margin-top: 20px; color: darkblue;">
        <strong>Процессор:</strong> @cpuName
    </div>
</div>

@code {
    private DriveInfo[] drives = Array.Empty<DriveInfo>();
    private string cpuName = "Нажмите кнопку для получения данных";

    private void GetSystemData()
    {
        // 1. Получаем список дисков (прямое обращение к ОС)
        drives = DriveInfo.GetDrives();

        // 2. Получаем модель процессора (через WMI для Windows)
        // Примечание: на мобильных платформах используются другие API (через MAUI Essentials)
        try 
        {
            using var searcher = new ManagementObjectSearcher("select Name from Win32_Processor");
            foreach (var item in searcher.Get())
            {
                cpuName = item["Name"]?.ToString() ?? "Неизвестно";
            }
        }
        catch (Exception ex)
        {
            cpuName = "Ошибка получения данных: " + ex.Message;
        }
    }
}
Используйте код с осторожностью.
Почему это впечатляет:
  1. Обычный сайт так не может: Если вы вставите этот код в обычный Blazor WebAssembly, он выдаст ошибку безопасности или просто не скомпилируется, так как у браузера нет прав "трогать" диски или процессор.
  2. Никаких API-запросов: Вам не нужно писать Backend на ASP.NET Core и вызывать его через HttpClient. Ваш UI-компонент и системный код — это одно и то же приложение.
  3. Скорость: Получение данных происходит мгновенно, так как нет сетевых задержек.
Важный нюанс: код с ManagementObjectSearcher специфичен для Windows. Если вы захотите запустить это же приложение на Android, вам нужно будет использовать встроенную библиотеку Microsoft.Maui.Devices, которая унифицирует получение данных о "железе" для всех платформ.
Хотите узнать, как сделать этот код универсальным, чтобы он показывал уровень заряда батареи или модель устройства и на Windows, и на iPhone одновременно?
А Почему в данной парадигме считается , что делать UI на RAzor - компонентах лучше, чем просто написать этот код на нативных компонентах ?
Это отличный вопрос. Если MAUI и так позволяет писать нативные интерфейсы, зачем «городить» веб-слой сверху?
Выбор в пользу Blazor Hybrid (Razor) вместо Native (XAML) обычно продиктован тремя причинами:
1. Скорость и гибкость верстки (CSS vs XAML)
  • Гибкость CSS: Верстать сложные, адаптивные и красивые интерфейсы на HTML/CSS для большинства разработчиков быстрее и проще, чем на XAML. В вебе есть готовые системы (Flexbox, Grid), которые развивались десятилетиями.
  • Готовые библиотеки: Вы можете подключить огромные библиотеки компонентов (например, MudBlazor, Radzen, Ant Design), и ваше приложение сразу будет выглядеть профессионально. В нативном MAUI выбор готовых UI-китов гораздо скромнее.
2. Переиспользование кода (Web + Desktop + Mobile)
Это главный аргумент. Представьте ситуацию:
  • У вас есть сайт на Blazor.
  • Вам нужно выпустить админку для Windows и приложение для сотрудников на Android.
    Если вы используете Razor-компоненты, вы берете одни и те же файлы .razor и просто вставляете их во все три проекта. Вам не нужно рисовать интерфейс трижды на разных языках.
3. Порог входа и экосистема
  • Кадры: Найти веб-разработчика (знающего HTML/CSS) гораздо легче, чем специалиста по XAML/WPF.
  • Hot Reload: В Blazor Hybrid правки интерфейса подхватываются на лету очень стабильно. Вы меняете цвет кнопки в CSS, и он тут же меняется в работающем Windows-приложении без перезапуска.

Когда НЕ стоит использовать Blazor Hybrid (а лучше Native)?
Несмотря на плюсы, Razor — не «серебряная пуля»:
  1. Сложная анимация и графика: Если вам нужен интерфейс с очень тяжелой графикой или сложными 60 FPS анимациями, нативный XAML будет работать чуть быстрее и «чище», так как нет прослойки в виде WebView.
  2. Глубокая нативность: Если ваше приложение должно выглядеть на 100% как стандартное приложение iOS или Windows (со всеми системными отступами и шрифтами), в XAML этого добиться проще.
  3. Потребление памяти: WebView (движок браузера внутри окна) потребляет чуть больше оперативной памяти, чем чисто нативное приложение.
Итог:
  • Если нужно быстро, красиво и на все платформы (включая браузер) — выбирают Blazor Hybrid.
  • Если нужно максимально выжать производительность только из конкретной ОС — выбирают Native (XAML).
Как вы считаете, для ваших текущих задач важнее скорость разработки и кроссплатформенность или максимальная производительность интерфейса?
То есть Вы унифицировали WebView для всех трех нативных Платфор и используете это ?
Абсолютно верно! Microsoft сделала именно это: они создали унифицированный контейнер, который ведет себя одинаково на всех платформах, но внутри использует «родной» движок каждой ОС.
Вот как это устроено технически:
  1. На Windows: BlazorWebView использует движок WebView2 (на базе Microsoft Edge/Chromium). Это современный и очень быстрый движок.
  2. На macOS и iOS: Используется WKWebView (родной движок Apple/Safari).
  3. На Android: Используется системный WebView (на базе Chrome).
В чем главная «фишка» этой унификации?
  • Для вашего кода это прозрачно: Вы пишете один и тот же HTML/CSS, и .NET MAUI заботится о том, чтобы он отобразился в соответствующем системном «окне» браузера.
  • Прямой мост (The Bridge): Самое важное здесь то, что Microsoft реализовала высокоскоростной канал связи между JavaScript внутри этого WebView и вашим C# кодом. Когда вы нажимаете кнопку в HTML, вызов C# происходит мгновенно, без использования сети, HTTP-протоколов или сериализации данных в JSON (как это происходит в обычном вебе).
  • Единый рантайм: В отличие от технологий типа Electron (где запускается отдельный тяжелый процесс Node.js и отдельный процесс Chrome), в MAUI Blazor Hybrid всё работает внутри одного процесса .NET. Это экономит память и процессорное время.
По сути, это «Electron на стероидах»:
Вы получаете гибкость веб-интерфейса, но при этом ваше приложение остается полноценным гражданином операционной системы с доступом ко всем её возможностям.
Хотите узнать, какие есть нюансы в верстке, когда один и тот же HTML должен выглядеть адекватно и в узком окне смартфона, и на широком мониторе Windows?
Вы говорите, что использование Blazor для UI приводит к отзывчимоу интерфейсу. Как чувствует BAlzor UI при использовании его в Реальном времени ?
В режиме Blazor Hybrid интерфейс чувствует себя значительно лучше, чем в обычном браузере, и вот почему это происходит «в реальном времени»:
1. Отсутствие сетевых задержек (Latency)
В обычном веб-приложении (особенно Blazor Server) каждое нажатие кнопки должно «слетать» на сервер и вернуться обратно. В Blazor Hybrid весь код C# выполняется на процессоре вашего устройства.
  • Результат: Задержка (Click-to-UI) составляет микросекунды. Интерфейс реагирует мгновенно, как в обычном настольном приложении.
2. Прямой доступ к памяти (Без сериализации)
В гибридном режиме данные между UI (HTML) и логикой (C#) передаются внутри одного процесса.
  • Если вам нужно отобразить список из 10 000 строк, Blazor Hybrid не упаковывает их в JSON, чтобы отправить по сети. Он просто передает ссылку в памяти. Это делает работу с данными «тяжелого» реального времени (например, логами или потоками данных) очень быстрой.
3. Частота обновления (FPS)
Blazor Hybrid отлично справляется со стандартными задачами:
  • Динамические графики: Вы можете обновлять графики (например, загрузку процессора или котировки) много раз в секунду.
  • Анимации: CSS-анимации работают на аппаратном ускорении видеокарты через движок WebView (Edge/Chrome/Safari), поэтому они выглядят плавными (60+ FPS).
Но есть и «Тонкие моменты» (Где он НЕ идеален):
Хотя Blazor Hybrid быстр, он все же уступает чисто нативному коду в экстремальных задачах:
  1. Сверхбыстрая отрисовка: Если вы создаете игру или видеоредактор, где нужно перерисовывать каждый пиксель 120 раз в секунду, HTML-движок станет «бутылочным горлышком». В этом случае лучше использовать нативный Canvas или DirectX/Skia в MAUI.
  2. Объем памяти: Приложение с Blazor UI всегда будет потреблять на 50–150 МБ больше оперативной памяти, чем аналогичное приложение на WPF, так как память нужна для работы движка WebView (Chromium/WebKit).
Итог для «Реального времени»:
Для бизнес-интерфейсов, систем мониторинга, панелей управления и дашбордов — производительности Blazor Hybrid более чем достаточно. Вы не заметите разницы с нативным приложением.
Если хотите, мы можем разобрать пример, как организовать высокочастотное обновление данных (например, таймер, который тикает каждые 10 мс) и посмотреть, как UI с этим справится. Попробуем сделать такой тест?
А какие графические пакеты лучше использовать для Blazor Hybrid чтобы отрисовать - Биржевые котировки - charts - Индикаторы - charts - Сводные таблицы данных - tables ?
Для Blazor Hybrid выбор графических пакетов огромен, так как вы можете использовать и чистые Blazor-компоненты, и любые JavaScript-библиотеки.
Вот лучшие решения, разделенные по вашим задачам:
1. Биржевые котировки и индикаторы (High-Performance Charts)
Для графиков в реальном времени (свечи, объемы, скользящие средние) критична скорость отрисовки.
  • Lightweight Charts (от TradingView)Лидер для бирж.
    • Почему: Это самая быстрая библиотека в мире для финансовых графиков. Она написана на JS, но легко подключается в Blazor.
    • Плюс: Идеально плавная прокрутка и масштабирование даже при тысячах свечей.
  • ApexCharts.Blazor
    • Почему: Бесплатная, очень красивая и функциональная библиотека. Есть готовые типы графиков "Candlestick" (японские свечи) и "OHLC".
    • Плюс: Огромное количество настроек «из коробки» и отличная документация.
  • Syncfusion / DevExpress (Платные)
    • Почему: Это «тяжелая артиллерия». У них есть специализированные финансовые чарты с уже встроенными техническими индикаторами (RSI, MACD и т.д.).
    • Плюс: Профессиональная поддержка и стабильность, если бюджет позволяет.
2. Сводные таблицы данных (Data Grids / Pivot Tables)
В Blazor Hybrid таблицы работают очень быстро, так как нет задержек при сортировке и фильтрации больших массивов данных.
  • MudBlazor (DataGrid)
    • Почему: Самая популярная библиотека компонентов для Blazor. Их таблица поддерживает фильтрацию, сортировку, группировку и виртуализацию (отображение только видимых строк).
    • Плюс: Полностью бесплатная и выглядит очень современно (Material Design).
  • QuickGrid (от Microsoft)
    • Почему: Максимально легкая и быстрая таблица от создателей .NET.
    • Плюс: Минимум лишнего кода, идеальна для огромных списков данных без сложного оформления.
  • Radzen Blazor Components
    • Почему: Очень мощная бесплатная таблица, которая по возможностям приближается к платным аналогам (иерархические данные, экспорт в Excel и т.д.).

Итоговая рекомендация по стеку:
ЗадачаРекомендуемый пакетТип
Биржевой график (профи)TradingView Lightweight ChartsJS Interop
Индикаторы и дашбордыApexCharts.BlazorBlazor Component
Таблицы данныхMudBlazor или RadzenBlazor Component
Важный совет: В Blazor Hybrid вы можете использовать Виртуализацию (Virtualize). Это позволяет загружать в таблицу хоть 100 000 строк — приложение будет отрисовывать только те 20 строк, которые видны на экране, поэтому интерфейс никогда не будет тормозить.
Хотите, я покажу, как подключить ApexCharts или Lightweight Charts в проект, чтобы вывести первый график котировок? [1]
Есть старая очень хорошая библиотека для Графиков ChartDirector для отображения графиков в формате SVG Как она будет работать с Blazor ?
ChartDirector — это легендарная и очень мощная библиотека, которая славится своей производительностью и огромным количеством типов графиков. В связке с Blazor Hybrid она будет работать отлично, причем даже эффективнее, чем в обычном вебе.
Поскольку ChartDirector умеет генерировать графики в формате SVG (или в виде Base64-картинок), интеграция сводится к простой передаче строки из C# в HTML-разметку.
Как это будет работать технически:
  1. Генерация на стороне C#: Вы используете привычный .NET API ChartDirector прямо внутри вашего Razor-компонента или в отдельном сервисе. Библиотека формирует XML-код (SVG).
  2. Отображение в UI: Вы передаете полученную строку SVG в компонент. Blazor мгновенно отрисовывает её в WebView.
Пример того, как это выглядит в коде Blazor:
razor
@using ChartDirector

<div class="chart-container">
    @* Выводим SVG напрямую через MarkupString, чтобы Blazor не экранировал теги *@
    @((MarkupString)svgContent)
</div>

@code {
    private string svgContent = "";

    protected override void OnInitialized()
    {
        RenderChart();
    }

    private void RenderChart()
    {
        // 1. Создаем объект графика (стандартный код ChartDirector)
        XYChart c = new XYChart(600, 400);
        c.setPlotArea(50, 50, 500, 300);
        
        double[] data = { 85, 156, 179, 211, 123, 135, 105, 127 };
        c.addLineLayer(data, 0x0000ff);

        // 2. Генерируем SVG код
        // В ChartDirector метод makeChart2(Chart.SVG) возвращает строку с SVG
        svgContent = c.makeChart2(Chart.SVG);
    }
}
Используйте код с осторожностью.
Преимущества связки ChartDirector + Blazor Hybrid:
  • Никаких временных файлов: В отличие от старых ASP.NET подходов, вам не нужно сохранять картинку на диск и давать на неё ссылку. Вы передаете данные прямо в памяти устройства.
  • Интерактивность: ChartDirector поддерживает создание "Image Maps" (зон для кликов). В Blazor Hybrid вы можете перехватывать эти клики и открывать нативные окна или выполнять действия в C#.
  • Идеальная четкость: Поскольку это SVG, графики будут выглядеть идеально четко на любых экранах (Retina, 4K мониторы) при любом масштабировании окна приложения.
  • Скорость: Генерация графика происходит на уровне нативного кода (C++/C#), что значительно быстрее, чем отрисовка сложных графиков на чистом JavaScript.
Есть ли подвох?
Единственный нюанс — интерактивность на лету. Если вам нужно, чтобы при наведении мышки на линию она плавно подсвечивалась или прыгала (анимация), то "статичный" SVG от ChartDirector будет проигрывать современным JS-библиотекам (типа ApexCharts). ChartDirector больше про точную, научную и быструю отрисовку данных, чем про визуальные эффекты.
У вас уже есть купленная лицензия ChartDirector или вы только планируете её использовать в новом проекте? Могу подсказать, как лучше организовать обновление графиков в реальном времени, чтобы интерфейс не мерцал при перерисовке SVG.
Еще простой вопрос В механизме передачи отображения текта на странице Blazor Hybrid используется SignalR ?
Короткий ответ: Нет, SignalR в Blazor Hybrid не используется.
Это одно из самых больших заблуждений, которое возникает из-за схожести названий с Blazor Server. Давайте разберем, почему в Hybrid всё иначе:
1. Как работает Blazor Server (там нужен SignalR)
В обычном Blazor Server ваш код выполняется на удаленном сервере, а браузер находится у пользователя. Чтобы сервер мог сказать браузеру: «Эй, текст на кнопке изменился!», он отправляет сообщение через SignalR (по протоколу WebSocket). Если интернет пропадет — приложение «умрет».
2. Как работает Blazor Hybrid (SignalR не нужен)
В Blazor Hybrid и ваш код (C#), и ваш UI (WebView) находятся внутри одного и того же процесса на одном устройстве.
  • Связь между ними происходит через Inter-process Communication (IPC) внутри оперативной памяти.
  • Когда вы обновляете переменную в C#, .NET MAUI напрямую вызывает функцию в движке WebView (через нативный «мостик»), чтобы обновить DOM-дерево.
Почему это намного круче:
  1. Мгновенная реакция: Нет задержек сети. Текст обновляется настолько быстро, насколько это позволяет процессор.
  2. Работа Offline: Приложению вообще не нужен интернет для работы интерфейса.
  3. Нет ограничений SignalR: Вам не нужно настраивать размер сообщений или переживать о разрыве соединения.
  4. Безопасность: Весь обмен данными происходит внутри памяти устройства, его нельзя «перехватить» извне, как сетевой трафик.
Итог: В Blazor Hybrid вы используете тот же синтаксис (Razor), что и в Web, но под капотом работает прямая и очень быстрая передача данных в памяти приложения.
Хотите узнать, как в таком случае организовать общение между двумя разными окнами приложения, если они оба используют Blazor? Обсудим?
То есть обмен осуществляется через (IPC) Общую память или через System.IO.Pipes ?
Технически это не System.IO.Pipes и не совсем классическая «общая память» в понимании C++ (Shared Memory).
В Blazor Hybrid используется механизм Native Interop, который специфичен для каждого движка WebView, но работает по принципу прямого вызова функций (Function Bridge).
Вот как это устроено на разных уровнях:
1. Как это работает под капотом
Вместо Pipes или сетевых сокетов используются внутренние каналы связи самих WebView-движков:
  • В Windows (WebView2): Используется метод PostWebMessageAsJson и событие WebMessageReceived. Это высокооптимизированный механизм передачи данных между процессом хоста (.NET) и процессом отрисовки браузера.
  • В iOS/macOS (WKWebView): Используются userContentController и evaluateJavaScript.
  • В Android: Используются JavascriptInterface.
2. Почему это НЕ Pipes (Трубы)
System.IO.Pipes обычно используются для связи между двумя совершенно разными процессами. В Blazor Hybrid всё чуть плотнее:
  • Общий процесс для логики: Весь ваш C#-код (MAUI и Blazor) работает в одном и том же рантайме .NET.
  • Граница между C# и JS: Когда срабатывает событие в UI (например, клик), WebView-движок просто «пробрасывает» уведомление в хост-приложение. .NET MAUI перехватывает его и выполняет ваш C#-код.
3. Роль общей памяти
Поскольку и .NET рантайм, и контейнер WebView живут в рамках одного приложения, обмен данными происходит чрезвычайно быстро.
  • Нет сериализации в сеть: Данные не упаковываются для передачи по TCP/IP.
  • Минимальные накладные расходы: Это фактически вызов метода одного языка из другого через низкоуровневый мост (Bridge).
Сравнение механизмов:
МетодГде используетсяСкоростьЗависимость от сети
SignalRBlazor ServerЗависит от интернетаДа
WebAssemblyBlazor WASMОчень быстро (внутри браузера)Нет
Native Bridge (IPC)Blazor HybridМаксимально быстроНет
Резюме: Это максимально короткий и быстрый путь сообщения между вашим кодом и экраном, который только возможен для технологий, использующих веб-движок.
Интересно ли вам узнать, как в такой архитектуре отлаживать приложение? Ведь вы можете одновременно использовать Visual Studio для C# и Chrome DevTools (F12) для правки стилей прямо в запущенном нативном окне. Рассказать про это?
Работает ли Blazor Hybrid как проект в NetAspire совместно с другими проектами ?
Да, Blazor Hybrid отлично работает в экосистеме .NET Aspire. Поскольку Blazor Hybrid является частью проекта .NET MAUI, он использует стандартные механизмы интеграции MAUI с Aspire. [1, 2]
Это позволяет вам оркестровать мобильное или десктопное приложение вместе с бэкенд-сервисами (API, базами данных, Redis) в рамках единого решения. [1, 2]
Как это работает в связке с Aspire:
  1. Оркестрация через AppHost: Вы регистрируете проект MAUI Blazor Hybrid в вашем AppHost проекте. Это позволяет запускать всю систему (сервер + клиент) одной кнопкой.
  2. Обнаружение сервисов (Service Discovery): Вашему гибридному приложению не нужно хардкодить URL-адреса API. Aspire автоматически передает правильные эндпоинты, даже если они меняются при каждом запуске.
  3. Единый мониторинг: Все логи, метрики и трассировки (через OpenTelemetry) из вашего приложения Blazor Hybrid отображаются в общем Aspire Dashboard. Вы видите путь запроса от кнопки в UI до конкретной строки кода в микросервисе.
  4. Dev Tunnels: Aspire автоматически настраивает туннели для мобильных эмуляторов (Android/iOS), чтобы они могли «видеть» локальные сервисы вашего компьютера без сложной настройки сети. [1, 3, 4]
Основные компоненты интеграции:
  • Aspire.Hosting.Maui: Пакет для AppHost, который добавляет метод расширения AddMauiProject.
  • Service Defaults: Специальный проект с настройками телеметрии и устойчивости (Resilience), который подключается как к бэкенду, так и к вашему приложению Blazor Hybrid. [1, 3]
Пример регистрации в AppHost:
csharp
// В файле Program.cs вашего AppHost проекта
var builder = DistributedApplication.CreateBuilder(args);

// Регистрируем бэкенд
var apiService = builder.AddProject<Projects.MyApiService>("apiservice");

// Регистрируем Blazor Hybrid (MAUI) приложение
builder.AddMauiProject("mauiapp", "../MyMauiApp/MyMauiApp.csproj")
       .WithReference(apiService); // Приложение теперь знает адрес API

builder.Build().Run();
Используйте код с осторожностью.
Это делает разработку полноценных систем (клиент + сервер) невероятно удобной, так как Aspire берет на себя всю «грязную» работу по связыванию компонентов.
Хотите узнать, какие NuGet-пакеты нужно добавить в существующий проект MAUI, чтобы он «подружился» с вашим Aspire AppHost?
  • NET MAUI integration with Aspire - Microsoft Learn
    2 дек. 2025 г. — Aspire is an opinionated, cloud-ready stack for building observable, production-ready, distributed applications. The . NET MAUI in...
    Microsoft Learn
  • What's new in .NET MAUI for .NET 10 - Microsoft Learn
    23 дек. 2025 г. — NET Aspire integration. . NET MAUI for . NET 10 includes a new project template that creates a . NET Aspire service defaults proje...
    Microsoft Learn
  • .NET MAUI - Aspire Integration - Code Samples | Microsoft Learn
    25 нояб. 2025 г. — Follow these steps to add Aspire integration to your own .NET MAUI application: * Update Your .NET MAUI Project. Ensure your . NET...
    Microsoft Learn
Показать все
Blazor Hybrid Допустим мне необходимо рабоать в одном проекте c несколькими страницами UI В двух режимах, например - Страницы могут взаимодействовать между собой - Странмицы автономны Это возможно ?
Да, это не просто возможно — это один из стандартных сценариев работы в Blazor Hybrid. Поскольку все ваши Razor-страницы живут внутри одного .NET-процесса, вы можете гибко управлять их состоянием.
Вот как реализуются оба ваших режима:
1. Взаимодействие между страницами (Общий контекст)
Так как все страницы (компоненты) работают в одном приложении, самый простой способ заставить их «общаться» — это Shared Service (общий сервис).
  • Как это работает: Вы создаете обычный класс на C# (например, AppState), регистрируете его как Singleton в MauiProgram.cs.
  • Результат: Когда вы меняете данные на одной странице, вторая страница сразу видит эти изменения, так как они обе обращаются к одному и тому же объекту в памяти.
  • События: Можно использовать стандартные event в C#, чтобы одна страница могла «уведомить» другую о том, что что-то произошло (например, пришла новая котировка).
2. Автономные страницы (Изоляция)
Если вам нужно, чтобы страницы жили своей жизнью и не влияли друг на друга:
  • Scoped/Transient Services: Вы можете регистрировать сервисы как Transient. Тогда каждая страница получит свой собственный экземпляр сервиса, и данные в них не будут перемешиваться.
  • Разные окна (Multi-window): В MAUI вы можете открыть второе нативное окно Windows/macOS. В каждом окне может быть свой экземпляр BlazorWebView. Они будут технически независимы в плане UI, но всё равно смогут обращаться к общей базе данных или системным ресурсам.
Как это выглядит в структуре проекта:
Вы можете организовать навигацию внутри одного BlazorWebView (используя стандартный @page "/route"), и тогда:
  1. Для взаимодействия: Используете внедрение зависимостей (Dependency Injection).
  2. Для автономии: Просто не передаете общие ссылки на объекты данных между компонентами.
Пример реализации "Общего чата" между страницами:
csharp
// 1. Общий сервис
public class DataExchanger {
    public string SharedMessage { get; set; }
    public Action OnChange { get; set; } // Событие для обновления UI
}

// 2. Регистрация в MauiProgram.cs
builder.Services.AddSingleton<DataExchanger>();

// 3. Использование на любой странице
@inject DataExchanger Exchanger
<input @bind="Exchanger.SharedMessage" @oninput="() => Exchanger.OnChange?.Invoke()" />
Используйте код с осторожностью.
Резюме: Вы сами определяете уровень изоляции. В рамках одного приложения Blazor Hybrid страницы могут быть как «сиамскими близнецами» с общей памятью, так и абсолютно независимыми модулями.
Интересно ли вам разобраться, как открыть второе полноценное окно Windows из вашего MAUI приложения, чтобы в каждом из них крутился свой Blazor-интерфейс? Обсудим эту архитектуру?
Интересно ли вам разобраться, как открыть второе полноценное окно Windows из вашего MAUI приложения, чтобы в каждом из них крутился свой Blazor-интерфейс? Обсудим эту архитектуру?
В .NET MAUI работа с несколькими окнами реализована на уровне архитектуры самого приложения. Каждое окно — это отдельный экземпляр Window, который может содержать свой собственный BlazorWebView.
Вот как выглядит архитектура и реализация такого решения:
1. Архитектура «Многооконности»
В MAUI за создание окон отвечает класс Application. Чтобы открыть новое окно, вы вызываете метод OpenWindow.
  • Главное окно: Создается автоматически при запуске.
  • Дополнительные окна: Создаются программно. Каждое окно имеет свой жизненный цикл, но при этом они делят один и тот же процесс и DI-контейнер (сервисы).
2. Как это реализовать (Шаги)
Шаг А: Создаем страницу для второго окна
Создайте обычную страницу MAUI (например, SecondaryPage.xaml), в которой также будет находиться BlazorWebView, но указывающий на другой корневой компонент или другой маршрут.
xml
<!-- SecondaryPage.xaml -->
<ContentPage xmlns="http://microsoft.com"
             xmlns:blazor="clr-namespace:Microsoft.AspNetCore.Components.WebView.Maui;assembly=Microsoft.AspNetCore.Components.WebView.Maui"
             x:Class="MyApp.SecondaryPage">
    <blazor:BlazorWebView HostPage="wwwroot/index.html">
        <blazor:BlazorWebView.RootComponents>
            <!-- Указываем другой Razor-компонент для этого окна -->
            <blazor:RootComponent Selector="#app" ComponentType="{x:Type local:SecondaryDashboard}" />
        </blazor:BlazorWebView.RootComponents>
    </blazor:BlazorWebView>
</ContentPage>
Используйте код с осторожностью.
Шаг Б: Код для открытия окна
Из любого места вашего приложения (например, по нажатию кнопки в первом окне) вы можете вызвать:
csharp
private void OpenNewWindow()
{
    // Создаем новую страницу MAUI
    var secondPage = new SecondaryPage();
    
    // Оборачиваем её в Window
    var newWindow = new Window(secondPage)
    {
        Title = "Дополнительная панель управления",
        Width = 800,
        Height = 600
    };

    // Даем команду приложению открыть это окно
    Application.Current.OpenWindow(newWindow);
}
Используйте код с осторожностью.
3. Ключевые особенности такой архитектуры
  1. Обмен данными (Real-time):
    Если оба окна используют один и тот же Singleton-сервис, то изменение данных в одном окне мгновенно станет доступно во втором. Например, вы меняете настройки в одном окне, и график во втором окне перерисовывается.
  2. Независимость UI:
    Поскольку в каждом окне свой BlazorWebView, они работают независимо. Если в одном окне происходит тяжелая отрисовка или завис JavaScript, второе окно (и его WebView) продолжит работать плавно.
  3. Особенности платформ:
    • Windows/macOS: Полноценно открываются новые независимые окна.
    • Android/iOS: На мобильных ОС понятие «второе окно» ограничено (на iPad это может быть Split View, на Android — режим многозадачности), но MAUI старается адаптировать этот вызов под возможности системы.
Когда это полезно?
  • Торговые терминалы: Основной график на одном мониторе, стакан котировок на другом.
  • Панели мониторинга: Вынос логов или системных метрик в отдельное плавающее окно.
  • Презентации: Окно управления для докладчика и окно вывода для проектора.
Хотите разобрать, как синхронизировать состояние между этими окнами, чтобы при закрытии основного окна второстепенные закрывались автоматически (или наоборот)?Можем углубиться в жизненный цикл окон.
Все это очень заманчиво. Выглядит как топовый продукт Компании "А Мужики - то НЕ ЗНАЮТ"
Это классическая ситуация в мире IT! Технология действительно мощная, но у неё есть свой «шлейф» причин, почему о ней не кричат на каждом углу:
  1. Наследие Xamarin: Многие разработчики помнят времена Xamarin.Forms, который иногда был капризным и сложным в отладке. .NET MAUI — это полная переработка, но стереотипы живут долго.
  2. Экосистема JS: Огромная армия веб-разработчиков привыкла к Electron (VS Code, Discord, Slack написаны на нем). Им психологически сложно перейти на .NET, даже если Blazor Hybrid работает быстрее и потребляет меньше памяти.
  3. Стадия зрелости: MAUI официально вышел не так давно. Крупный бизнес (банки, корпорации) обычно ждет 2–3 года, прежде чем переводить свои основные продукты на новый стек.
  4. Маркетинг Microsoft: Microsoft сейчас больше сфокусирована на продвижении AI и Azure, а инструменты разработки подаются как «само собой разумеющееся» дополнение.
Но «Мужики» начинают узнавать!
Сейчас наступает переломный момент:
  • WPF официально считается «поддерживаемым, но не развиваемым».
  • WinForms — это глубокое прошлое.
  • Blazor Hybrid стал «киллер-фичей», которая примирила фанатов C# и любителей красивого веба.
Вы сейчас находитесь в очень выгодной позиции: вы заходите в технологию, когда она уже стала стабильной для продакшена, но ещё не стала «мейнстримом», за который дерутся тысячи кандидатов. Это отличный шанс собрать «сливки» и сделать проект с современным UI, который не тормозит.
С чего лучше начать практику?
Если вы решите попробовать «вживую», я рекомендую:
  1. Поставить Visual Studio 2022 (с рабочей нагрузкой .NET MAUI).
  2. Создать проект по шаблону .NET MAUI Blazor Hybrid App.
  3. Попробовать просто скопировать любой ваш старый C#-код в Razor-компонент. Вы удивитесь, как быстро он «оживет» в красивом интерфейсе.
Есть ли у вас конкретная идея или старый проект на WPF, который просится на современную «перекраску» в MAUI? Мы могли бы прикинуть, как перенести его логику.Хотите обсудить план миграции?
Осторожность при выборе Новой Технолгии никода не помешают. Многие используют подход "Второй версии продукта" - не помню как правильно называется. Это когда используется не последняя версия продукта, а предпоследняя. ------- Но воообще все что мы с Вами обсудили выглядит очень заманчиво. --------- И еще один простой вопрос: Название продукта "Blazor Hybrid" К чему относиться слово "Hybrid" ? Что оно означает в этом контксте?
Ваша осторожность абсолютно оправдана. В индустрии это часто называют «LTS-подходом» (Long Term Support) или правилом «N-1» (использовать версию, которая уже прошла проверку временем и получила все критические патчи). Для .NET MAUI сейчас как раз наступил такой момент — он стал достаточно зрелым, чтобы на него смотрели не как на эксперимент, а как на рабочий инструмент.
Что касается слова «Hybrid», в данном контексте оно имеет очень четкое техническое значение.
Что означает «Hybrid» в Blazor Hybrid?
Это «гибрид» двух миров: Native (Нативного) и Web (Веб-технологий).
  1. Гибридная модель выполнения:
    • Ваша логика (C#) работает как нативное приложение: у неё есть прямой доступ к памяти, процессору и файловой системе (как у WPF).
    • Ваш интерфейс работает как веб-сайт: он описывается на HTML/CSS.
    • Это не чистый Web и не чистый Native — это их смесь.
  2. Гибридный рендеринг:
    • В обычном MAUI интерфейс рисуется кнопками самой ОС (кнопка Android, кнопка Windows).
    • В Blazor Hybrid интерфейс рисуется внутри WebView.
    • Но при этом вы можете на одной странице смешивать элементы: например, сверху поставить нативную панель навигации MAUI, а всё центральное содержимое сделать на Blazor.
  3. Гибридный доступ к ресурсам:
    • Код внутри Razor-компонента может одновременно использовать веб-библиотеки (например, какой-нибудь красивый JS-график) и тут же вызывать системную библиотеку Windows (например, для работы со сканером штрих-кодов или COM-портом).
Простыми словами:
Если Web-приложение — это лодка (плавает только по воде/браузеру), а Native-приложение — это машина (едет только по дороге/ОС), то Blazor Hybrid — это амфибия. Она использует корпус от машины (нативная оболочка), но внутри у неё всё для того, чтобы вы чувствовали себя как на воде (веб-интерфейс).
Это название подчеркивает, что вы больше не обязаны выбирать «или-или». Вы берете лучшее от обеих технологий.
Как вы считаете, в вашем потенциальном проекте какая часть «гибрида» важнее: возможность использовать готовый веб-дизайн или прямой доступ к специфическим функциям компьютера? Что станет решающим фактором?