Blazorise — компоненты Blazor для Bootstrap. Введение

Bootstrap замечательный фреймворк для web-приложений, но без должной подготовки и изучения документации довольно сложно собрать из имеющихся готовых компонентов какой-то свой уникальный или, хотя бы, похожий на популярные компонент. Например, тот же TreeView придется «изобретать» достаточно долго. Но зачем это делать, если всё уже придумано до нас? В сети появилось достаточно много готовых компонентов Blazor, однако мы сегодня начнем рассмотрение всего лишь одной, но достаточно мощной и функциональной библиотеки компонентов Blazor для Bootstrap — Blazorise.

Что из себя представляет Blazorise

Blazorise — это библиотека готовых компонентов Blazor с открытым исходным кодом. Пользоваться компонентами можно в том числе и бесплатно, получая при этом доступ к репозиторию на Github. Единственное условие, которое ставят разработчики перед пользователями компонентов — это приобретать лицензию на компоненты, если ваш годовой доход превышает $1 000 000.

Все компоненты разделены на ряд пакетов, которые можно увидеть в менеджере пакетов NuGet. Вот, например, как выглядит Blazorise на момент написания этого обзора:

Blazorise NuGet
Blazorise

 

Установка Blazorise

Для начала, попробуем воспроизвести простой пример использования этих компонентов в Blazor. Создадим новый проект в Visual Studio.NET MAUI Blazor.

.NET MAUI Blazor
Проект .NET MAUI Blazor

Установим следующие пакеты: Blazorise.Bootstrap и Blazorise.Icons.FontAwesome. Сделать это можно, как через менеджер пакетов NuGet, так и командами в консоли менеджера пакетов:

Install-Package Blazorise.Bootstrap
Install-Package Blazorise.Icons.FontAwesome

Первый пакет добавит в ваш проект Blazorise с поддержкой Bootstrap, второй — компонент для работы с иконками FontAwesome. Дополнительно можете установить и другие пакеты, которые могут вам пригодиться, например, Blazorise.Bootstrap5 для поддержки пятой версии Bootstrap или же Blazorise.Charts для доступа к компоненту работы с графиками. Нам пока потребуются эти два пакета.

Подключение статических файлов, необходимых Blazorise

Для работы, компонентам необходим доступ к оригинальным CSS и JS файлам тех или иных фреймворков, поэтому их необходимо подключить в проект в первую очередь. Для этого переходим в обозревателе решений в папку wwwroot нашего проекта и открываем файл index.html:

Blazor index.html

Добавляем в файл скрипты и ссылки на css-файлы как показано ниже:

<html>
<head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">

    <link href="_content/Blazorise/blazorise.css" rel="stylesheet" />
    <link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" />
</head>
<body>
    <div id="app"></div>

    
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js" integrity="sha384-VHvPCCyXqtD5DqJeNxl2dtTyhF78xXNXdkwX1CZeRusQfRKp+tA7hAShOK/B/fQ2" crossorigin="anonymous"></script>
</body>
</html>

Здесь стоит отметить следующее — все внешние ресурсы, типа JQuery или тот же Bootstrap мы подключили через cdn. Однако, никто не запрещает вам скачать необходимые файлы в ту же папку wwwroot проекта и сделать ссылки на локальные файлы. Здесь мы видим, что использоваться в примере будет Bootstrap версии 4.6.1. Но это для нас пока не важно, при необходимости, переключимся и на 5 версию.

Подключение Blazorise в свой проект

Компоненты Blazorise подключаются в проект как сервис. Для того, чтобы подключить компоненты в свой проект делаем следующее:

во-первых, открываем файл _Imports.razor и добавляем в него директиву @using BlazoriseВ итоге файл, если вы используете .NET 7, должен выглядеть следующим образом:

@using System.Net.Http
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using MauiApp1
@using MauiApp1.Shared
@using Blazorise

во-вторых, открываем файл MauiProgram.cs и добавляем в него следующий код:

.....
using Blazorise;
using Blazorise.Bootstrap;
using Blazorise.Icons.FontAwesome;


namespace MauiApp1;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        .......

        builder.Services
            .AddBlazorise(options => options.Immediate = true)
            .AddBootstrapProviders() //подключаем работу с компонентами Bootstrap
            .AddFontAwesomeIcons(); //добавляем поддержку работы с иконками

        ......

        return builder.Build();
    }
}

Теперь всё готово для использования компонентов Blazorise в нашем проекте. Начнем с самого начала — поменяем макет нашего приложения. Чтобы было с чем сравнить, напомню как выглядит интерфейс стандартного приложения Blazor Hybrid:

Шаблонное приложение Blazor Hybrid
Шаблонное приложение Blazor Hybrid

 

Меняем главный макет приложения

На данный момент, главный макет приложения выглядит следующим образом:

@inherits LayoutComponentBase

<div class="page">
    <div class="sidebar">
        <NavMenu />
    </div>

    <main>
        <div class="top-row px-4">
            <a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
        </div>

        <article class="content px-4">
            @Body
        </article>
    </main>
</div>

Заменим этот макет и создадим его с нуля, используя Blazorise. За работу с макетом приложения отвечают компоненты Layout..., а именно:

  • <Layout> — главный компонент макета приложения. В нем будут содержаться все остальные части макета
  • <LayoutHeader> — компонент макета для размещения в нем верхнего меню, иконки приложения и т.д.
  • <LayoutContent> — компонент для размещения в нем и отрисовки контента приложения
  • <LayoutFooter> — компонент «подвала»
  • <LayoutSider> — компонент бокового меню
    • <LayoutSiderContent> — компонент для размещения элементов бокового меню. Этот компонент должен находиться внутри <LayoutSider>

Итак сделаем макет, с заголовком (Header), подвалом (Footer) и боковым меню (Sidear). Удаляем всё, кроме первой строчки из файла MainLayout.razor и создаем макет с нуля:

<Layout>
    <LayoutHeader Fixed>
        Header
    </LayoutHeader>
    <Layout Sider>
        <LayoutSider>
            <LayoutSiderContent>
                 Sidebar               
            </LayoutSiderContent>
        </LayoutSider>
        <Layout>
            <LayoutContent>
                @Body
            </LayoutContent>
        </Layout>
    </Layout>
    <LayoutFooter Fixed>
        Footer
    </LayoutFooter>
</Layout>

Посмотрим, что мы здесь сделали. Во-первых, добавили главный компонент макета  — Layout.

Дальше идет LayoutHeader со свойством Fixed, которое указывает, что верхнее меню должно прижиматься кверху.

Затем идет ещё один компонент Layout у которого определено свойство Sider. Свойство Sider означает, что внутри этого компонента будет расположено боковое меню. Внутри этого компонента мы разместили LayoutSider и LayoutSiderContent — компоненты, которые нам необходимы для работы с боковым меню.

Затем снова вставлен Layout в котором мы определили LayoutContent для размещения контента приложения и, собственно указали директиву Razor @Body для вывода контента именно в этом месте.

Завершает весь наш макет компонент Footer, который мы будем также, как и «шапку» прижимать, но только не к верху, а к низу.

Теперь можно запустить приложение и полюбоваться на вот такой неказистый макет:

Макет Blazorise
Макет Blazorise

Теперь наполним этот макет каким-либо полезным содержимым: добавим элементы бокового меню, настроим немного подвал и верхнее меню.

Создаем боковое меню

Плохая идея заталкивать в главный макет всё, что, по нашему мнению не будет меняться от страницы к странице или будет меняться редко. Поэтому создадим меню сайдбара как отдельный компонент Blazor. Добавим в папку Shared новый компонент Blazor и назовем его SideMenu.razor:

SideMenu.razor
SideMenu.razor

Если вы немного знакомы с Bootstrap, то наверняка в курсе, что за меню отвечает компонент Bar. В Blazorise есть точно такой же компонент. Именно из него мы и будем собирать наше боковое меню. Вначале добавим «скелет» меню — сам компонент Bar, кнопку сворачивания и иконку приложения:

<Bar Mode="BarMode.VerticalInline" 
     CollapseMode="BarCollapseMode.Small"
     ThemeContrast="ThemeContrast.Light">
     @*Настраиваем брэнд - иконку и название приложения*@
    <BarBrand>
        <BarItem>
            <BarLink To="#">
                <BarIcon IconName="IconName.Dashboard" />
                Привет, Blazorise!
            </BarLink>
        </BarItem>
    </BarBrand>
    @*Добавляем кнопку сворачивания меню*@
    <BarToggler></BarToggler>
</Bar>

Здесь мы указали для нашего меню Bar следующие свойства:

Mode="BarMode.VerticalInline" Элементы меню выстраиваются вертикально

CollapseMode="BarCollapseMode.Small" При сворачивании меню не исчезает, а сворачивается до минимально ширины (будут видны только иконки)

ThemeContrast="ThemeContrast.Light" Настройка контрастности цветов — для светлой темы

Также мы добавили иконку приложения и его название (компонент BarBrand) и кнопку сворачивания (BarToggler). Теперь добавим это меню в наш макет приложения. Должно получиться следующим образом:

<Layout>
    <LayoutHeader Fixed>
        Header
    </LayoutHeader>
    <Layout Sider>
        <LayoutSider>
            <LayoutSiderContent>
                 @*Вставляем главное меню в макет*@
                 <SideMenu></SideMenu>              
            </LayoutSiderContent>
        </LayoutSider>
        <Layout>
            <LayoutContent>
                @Body
            </LayoutContent>
        </Layout>
    </Layout>
    <LayoutFooter Fixed>
        Footer
    </LayoutFooter>
</Layout>

Теперь запустим приложение и полюбуемся на результат (кликните по картинке, если анимация не проигрывается):

Боковое меню Blazorise
Боковое меню Blazorise

 

Теперь добавим пару ссылок в меню. Для этого допишем наш компонент SideMenu.razor следующим образом:

<Bar Mode="BarMode.VerticalInline"
     CollapseMode="BarCollapseMode.Small"
     ThemeContrast="ThemeContrast.Light">
    @*Настраиваем брэнд - иконку и название приложения*@
    <BarBrand>
        <BarItem>
            <BarLink To="#">
                <BarIcon IconName="IconName.Dashboard" />
                Привет, Blazorise!
            </BarLink>
        </BarItem>
    </BarBrand>

    @*Меню приложения*@ 
    <BarMenu>
        @*Эти элементы меню будут прижиматься к верху*@
        <BarStart>
            @*Ссылка на главную страницу*@
            <BarItem>
                <BarLink To="/">
                    <BarIcon IconName="IconName.Home" />
                    Главная
                </BarLink>
            </BarItem>
            @*Ссылка на счётчик*@
            <BarItem>
                <BarLink To="counter">
                    <BarIcon IconName="IconName.Clock" />
                    Счётчик
                </BarLink>
            </BarItem>
        </BarStart>
        @*Эти элементы меню будут прижиматься к низу*@
        <BarEnd>
            <BarItem>
                <BarLink To="fetchdata">
                    <BarIcon IconName="IconName.User" />
                    Fetch Data
                </BarLink>
            </BarItem>
            
        </BarEnd>
    </BarMenu>



    @*Добавляем кнопку сворачивания меню*@
    <BarToggler></BarToggler>
</Bar>

По сути, мы вернули на место три пункта меню из шаблона приложения Blazor — ссылку на главную страницу, счётчик и демонстрацию работы с сервисами. Все шаги по построению такого меню закомментированы в коде. Теперь снова запустим приложение и посмотрим на результат (кликните по картинке, если анимация не проигрывается):

Blazorise боковое меню
Blazorise боковое меню

 

Остался один небольшой штрих, чтобы наш макет был готов. Обратите внимание как некрасиво контент страницы прижимается к меню. Давайте сделаем небольшой внутренний отступ. Для этого перейдем в главный макет нашего приложения и изменим компонент Layout для вывода контента следующим образом:

 <Layout>
    <LayoutContent Padding="Padding.Is4.OnAll">
        @Body
    </LayoutContent>
</Layout>

Здесь мы добавили свойство Padding, которое означает следующее: padding (внутренний отступ) равен $spacer * 1.5 по всем направлениям (сверху, снизу, слева, справа). Результат будет следующим (кликните по картинке, если анимация не проигрывается):

Отступы
Отступы

 

Теперь наше приложение более красивым и функциональным. В следующий раз мы продолжим работу с компонентами Blazorise и посмотрим на другие не менее интересные вещи.

Итого

Blazorise — это библиотека из более 80 различных компонентов, позволяющих использовать всю мощь Bootstrap и, при этом, оперировать известными программисту C# терминами и понятиями. Компоненты позволяют перестраивать графическую часть приложения Blazor практически с нуля — начиная с макета приложения.

 

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии