首页 > 其他分享 >MudBlazor:基于Material Design风格开源且强大的Blazor组件库

MudBlazor:基于Material Design风格开源且强大的Blazor组件库

时间:2024-11-09 08:48:33浏览次数:1  
标签:Index TimeSeriesChartSeries MudBlazor Material private Design new NET

项目介绍

MudBlazor是一个基于Material Design风格开源、免费(MIT License)、功能强大的Blazor组件框架,注重易用性和清晰的结构。它非常适合想要快速构建Web应用程序的 .NET 开发人员,无需费力地处理 CSS 和 JavaScript。由于MudBlazor完全使用C#编写,因此你可以自由地调整、修复或扩展该框架。文档中有大量示例代码,能够帮助开发者快速理解和学习MudBlazor框架。

Blazor是什么?

Blazor是一个使用 .NET框架和C#编程语言Razor语法构建Web应用程序的UI框架,它可以用于构建单页应用(SPA)和 Web服务,它使用编译的C#来操纵HTML DOM来替代JavaScript。Blazor 的目标是让开发人员使用C#编程语言来编写 Web 应用程序,使得C#程序员可以在一个熟悉的编程语言中完成整个应用程序的开发。这样既可以提高开发效率,也可以减少学习成本。

项目源代码

组件库引入

安装NuGet包

dotnet add package MudBlazor

将以下内容添加到 _Imports.razor

@using MudBlazor

将以下内容添加到App.razor

<MudThemeProvider/>
<MudPopoverProvider/>
<MudDialogProvider/>
<MudSnackbarProvider/>

将以下内容添加到index.html

<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet" />
<link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet" />

<script src="_content/MudBlazor/MudBlazor.min.js"></script>

将以下内容添加到 Program.cs 的相关部分

using MudBlazor.Services;

builder.Services.AddMudServices();

Bar Chart

<div>
    <MudChart ChartType="ChartType.Bar" ChartSeries="@Series" @bind-SelectedIndex="Index" XAxisLabels="@XAxisLabels" Width="100%" Height="350px"></MudChart>
</div>
<MudText Typo="Typo.h6">Selected portion of the chart: @Index</MudText>
@code {
    private int Index = -1; //default value cannot be 0 -> first selectedindex is 0.

    public List<ChartSeries> Series = new List<ChartSeries>()
    {
        new ChartSeries() { Name = "United States", Data = new double[] { 40, 20, 25, 27, 46, 60, 48, 80, 15 } },
        new ChartSeries() { Name = "Germany", Data = new double[] { 19, 24, 35, 13, 28, 15, 13, 16, 31 } },
        new ChartSeries() { Name = "Sweden", Data = new double[] { 8, 6, 11, 13, 4, 16, 10, 16, 18 } },
    };
    public string[] XAxisLabels = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep" };
}

Basic Pie

<MudPaper Class="pa-4">
    <MudChart ChartType="ChartType.Pie" InputData="@data" @bind-SelectedIndex="Index" InputLabels="@labels" Width="300px" Height="300px" />
</MudPaper>
<MudPaper Class="pa-4 mt-2 d-flex justify-center">
    <MudButton OnClick="AddDataSize" Variant="Variant.Filled" Color="Color.Primary">Add</MudButton>
    <MudButton @onclick="RandomizeData" Variant="Variant.Filled" Class="mx-4">Randomize</MudButton>
    <MudButton OnClick="RemoveDataSize" Variant="Variant.Filled" Color="Color.Secondary">Remove</MudButton>  
</MudPaper>
<MudText Typo="Typo.h6">Selected portion of the chart: @Index</MudText>
@code {
    private int Index = -1; //default value cannot be 0 -> first selectedindex is 0.
    int dataSize = 4;
    double[] data = { 77, 25, 20, 5 };
    string[] labels = { "Uranium", "Plutonium", "Thorium", "Caesium", "Technetium", "Promethium",
                        "Polonium", "Astatine", "Radon", "Francium", "Radium", "Actinium", "Protactinium",
                        "Neptunium", "Americium", "Curium", "Berkelium", "Californium", "Einsteinium", "Mudblaznium" };

    Random random = new Random();

    void RandomizeData()
    {
        var new_data = new double[dataSize];
        for (int i = 0; i < new_data.Length; i++)
            new_data[i] = random.NextDouble() * 100;
        data = new_data;
        StateHasChanged();
    }

    void AddDataSize()
    {
        if (dataSize < 20)
        {
            dataSize = dataSize + 1;
            RandomizeData();
        }
    }
    void RemoveDataSize()
    {
        if (dataSize > 0)
        {
            dataSize = dataSize - 1;
            RandomizeData();
        }
    }
}

Time Series Chart

@using MudBlazor.Components.Chart.Models

<div>
    <MudTimeSeriesChart ChartSeries="@_series" @bind-SelectedIndex="Index" Width="100%" Height="350px" ChartOptions="@_options" CanHideSeries TimeLabelSpacing="TimeSpan.FromMinutes(5)" />
    <MudGrid>
        <MudItem xs="6">
            <MudText Typo="Typo.body1" Class="py-3">Selected: @(Index < 0 ? "None" : _series[Index].Name)</MudText>
        </MudItem>
        <MudItem xs="6">
            <MudSlider @bind-Value="_options.LineStrokeWidth" Min="1" Max="10" Color="Color.Info">Line Width: @_options.LineStrokeWidth.ToString()</MudSlider>
        </MudItem>
    </MudGrid>
</div>
@code
{
    private int Index = -1; //default value cannot be 0 -> first selectedindex is 0.
    private ChartOptions _options = new ChartOptions
        {
            YAxisLines = false,
            YAxisTicks = 500,
            MaxNumYAxisTicks = 10,
            YAxisRequireZeroPoint = true,
            XAxisLines = false,
            LineStrokeWidth = 1,
        };

    private TimeSeriesChartSeries _chart1 = new();
    private TimeSeriesChartSeries _chart2 = new();
    private TimeSeriesChartSeries _chart3 = new();

    private List<TimeSeriesChartSeries> _series = new();

    private readonly Random _random = new Random();

    protected override void OnInitialized()
    {
        base.OnInitialized();

        var now = DateTime.Now;

        _chart1 = new TimeSeriesChartSeries
            {
                Index = 0,
                Name = "Series 1",
                Data = Enumerable.Range(-360, 360).Select(x => new TimeSeriesChartSeries.TimeValue(now.AddSeconds(x * 10), _random.Next(6000, 15000))).ToList(),
                IsVisible = true,
                Type = TimeSeriesDiplayType.Line
            };

        _chart2 = new TimeSeriesChartSeries
            {
                Index = 1,
                Name = "Series 2",
                Data = Enumerable.Range(-360, 360).Select(x => new TimeSeriesChartSeries.TimeValue(now.AddSeconds(x * 10), _random.Next(0, 7000))).ToList(),
                IsVisible = true,
                Type = TimeSeriesDiplayType.Area
            };

        _chart3 = new TimeSeriesChartSeries
            {
                Index = 2,
                Name = "Series 3",
                Data = Enumerable.Range(-90, 60).Select(x => new TimeSeriesChartSeries.TimeValue(now.AddSeconds(x * 30), _random.Next(4000, 10000))).ToList(),
                IsVisible = true,
                Type = TimeSeriesDiplayType.Line
            };

        _series.Add(_chart1);
        _series.Add(_chart2);
        _series.Add(_chart3);

        StateHasChanged();
    }
}

更多组件库样式展示

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看

标签:Index,TimeSeriesChartSeries,MudBlazor,Material,private,Design,new,NET
From: https://www.cnblogs.com/Can-daydayup/p/18536079

相关文章

  • Vue3+AntDesign后台管理系统 | 小蚂蚁云
      项目介绍基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、AntDesign、MySQL等技术栈实现的单体前后端分离后台管理系统;后端基于Java语言采用SpringBoot3、SpringSecurity、MybatisPlus、MySQL等主流技术栈,前端基于Vue3、TypeScript、Vite等技术栈......
  • 推荐一款业内领先的建模工具:SAP PowerDesigner
    SAPPowerDesigner是一款业内领先的建模工具,帮助您改进商务智能,打造更卓越的信息架构。通过该软件的元数据管理功能,可以构建关键信息资产的360度全方位视图,从而使数据管理、BI、数据集成和数据整合工作大获裨益。其分析功能有助于整个信息架构中进行相关变更时,缩短时间,降低风......
  • Materials Studio 2023安装教程(仅作分享参考)
    一、软件下载软件名称:MaterialsStudio2023软件语言:英文软件大小:2.03G系统要求:Windows10或更高, 64位操作系统硬件要求:CPU@2+GHz,RAM@4G或更高下载通道①迅雷云盘丨下载链接:迅雷云盘下载通道②百度网盘丨下载链接:百度网盘请输入提取码提取码:6789二、软件介绍Material......
  • powerdesigner导出excel
     '******************************************************************************OptionExplicitDimrowsNumrowsNum=0'-----------------------------------------------------------------------------'Mainfunction'----------......
  • powerdesigner导出pdf
    设置合适页面大小:当图比较多的时候,默认是无法在一个页面(默认为A4页面尺寸)展示所有的,这是有两种方式:方式一(推荐):自适应即单击Fittopage或者Centertopage导出PDF:默认打开很小(A4页面):但是放大后,清晰度杠杠的:......
  • 万星开源项目:System Design Primer - 学习系统设计的必备指南
    GitHub链接:https://github.com/donnemartin/system-design-primer什么是SystemDesignPrimer?SystemDesignPrimer是一个专注于系统设计的开源项目,由DonneMartin创建并维护。它旨在帮助开发者掌握系统设计的核心概念,适用于那些想在面试中通过系统设计考核,或者希望提升自......
  • Adobe InDesign 各版本下载与安装
    1、安装包  我用夸克网盘分享了「AdobeInDesign2023.rar」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。链接:https://pan.quark.cn/s/526c259dad6f提取码:MfMX AdobeInDesign2022:链接:https://pan.quark.cn/s/c7ee80a21975提......
  • Ant Design Vue 的 a-table 行选择分页时bug处理
    有bug的伪代码如下(示例以id来作为rowKey):<a-table:row-selection="{selectedRowKeys:selectedRowKeys,onChange:onSelectChange}":columns="columns"rowKey="id":pagination="pagination":data-source=&q......
  • ElevenLabs Voice Design:文本生成个性化语音;科学家用 AI 解读猪叫声背后情绪和压力丨R
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • Adobe InDesign 2025 v20.0 (macOS, Windows) - 版面设计和桌面出版软件
    AdobeInDesign2025v20.0(macOS,Windows)-版面设计和桌面出版软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、Adobe......