在winform中使用blazor hybrid构建页面

1、.Net UI框架:Blazor Hybrid - .Net宣传系列文章      Blazor Hybrid 是 .NET 6 中引入的一个新特性,它允许开发者使用 Blazor 技术开发跨平台的桌面和移动应用程序。Blazor Hybrid 结合了 Blazor WebAssembly 和 Blazor Server 的优势,提供了一种在桌面和移动设备上运行 Blazor 应用的方法。   Blazor Hybrid 的关键特性包括: 跨平台应用:可以创建在 W... 阅读详情
AI摘要

本文详细描述了如何在WinForms项目中引入BlazorHybrid,涉及步骤如安装包、项目配置、组件添加及运行效果展示。,

1、Blazor Hybrid简介

Blazor Hybrid 使开发人员能够将桌面和移动本机客户端框架与 .NET 和 Blazor 结合使用。在 Blazor Hybrid 应用中,Razor 组件在设备上是本机运行的。 这些组件通过本地互操作通道呈现到嵌入式 Web 视图控件。 组件不在浏览器中运行,并且不涉及 WebAssembly。 Razor 组件可快速加载和执行代码,这些组件可通过 .NET 平台完全访问设备的本机功能。

image-20231208143823640

2、效果

3、步骤

如果对在winform中使用blazor hybrid感兴趣的话,可以继续往下阅读,看看具体的实现步骤是怎样的。

正常创建winform

创建一个winform,我这里使用的是.NET 8,如下所示:

image-20231208144608997

安装NuGet包

安装Microsoft.AspNetCore.Components.WebView.WindowsForms,如下所示:

image-20231208145229671

image-20231208145320892

更改csproj文件

在“解决方案资源管理器”中,右键单击项目的名称 ,然后选择“编辑项目文件”,如下所示:

image-20231208145822123

在项目文件的顶部,将 SDK 更改为 Microsoft.NET.Sdk.Razor,如下所示:

image-20231208145946074

点击保存,保存之后,你会发现你的项目变成了这样,如下所示:

image-20231208150644002

添加_Imports.razor 文件

_Imports.razor 文件添加到项目的根目录。如下所示:

image-20231208152453417

_Imports.razor中的内容为:

@using Microsoft.AspNetCore.Components.Web

如下所示:

image-20231208152614628

添加index.html 文件

先将 wwwroot 文件夹添加到该项目。

再将具有以下标记的 index.html 文件添加到 wwwroot 文件夹。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>WinFormsBlazor</title>
    <base href="/" />
    <link href="css/app.css" rel="stylesheet" />
    <link href="WinFormsBlazor.styles.css" rel="stylesheet" />
</head>

<body>

    <div id="app">Loading...</div>

    <div id="blazor-error-ui">
        An unhandled error has occurred.
        <a href="" class="reload">Reload</a>
        <a class="dismiss">🗙</a>
    </div>

    <script src="_framework/blazor.webview.js"></script>

</body>

</html>

在 wwwroot 文件夹中,创建一个 css 文件夹来保存样式表。

将具有以下内容的 app.css 样式表添加到 wwwroot/css 文件夹中。

wwwroot/css/app.css:

html, body {
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}

h1:focus {
    outline: none;
}

a, .btn-link {
    color: #0071c1;
}

.btn-primary {
    color: #fff;
    background-color: #1b6ec2;
    border-color: #1861ac;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid #26b050;
}

.invalid {
    outline: 1px solid red;
}

.validation-message {
    color: red;
}

#blazor-error-ui {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }

如下所示:

image-20231208153208293

添加Count组件

将以下 Counter 组件添加到项目的根目录,这是 Blazor 项目模板中的默认 Counter 组件。

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

如下所示:

image-20231208153518357

添加**BlazorWebView** 控件

在“解决方案资源管理器”中,双击 Form1.cs 文件以打开设计器:

image-20231208153925523

打开工具箱添加**BlazorWebView**控件:

image-20231208153651923

image-20231208155642508

将**BlazorWebView**控件最大化:

image-20231208155741004

修改Form1.cs

原本是这样的:

namespace WinFormBlazorHybridDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

修改后是这样的:

using Microsoft.AspNetCore.Components.WebView.WindowsForms;
using Microsoft.Extensions.DependencyInjection;
namespace WinFormBlazorHybridDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            var services = new ServiceCollection();
            services.AddWindowsFormsBlazorWebView();
            blazorWebView1.HostPage = "wwwroot\\index.html";
            blazorWebView1.Services = services.BuildServiceProvider();
            blazorWebView1.RootComponents.Add<Counter>("#app");
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

在顶部添加了:

using Microsoft.AspNetCore.Components.WebView.WindowsForms;
using Microsoft.Extensions.DependencyInjection;

在 Form1 构造函数中的 InitializeComponent 方法调用后面,添加以下代码:

 var services = new ServiceCollection();
 services.AddWindowsFormsBlazorWebView();
 blazorWebView1.HostPage = "wwwroot\\index.html";
 blazorWebView1.Services = services.BuildServiceProvider();
 blazorWebView1.RootComponents.Add<Counter>("#app");

运行效果

点击运行,界面如下所示:

image-20231208160408106

结语

后面就可以使用blazor的ui框架比如Ant Design Blazor等构建好看的页面了。

WinForm 集成 Ant Design 现代化图表 摘要: 本文介绍在WinForm中实现现代化图表组件的方案,结合Ant Design风格与Ant Design Charts的可视化能力。提供三种实现方式: AntdUI+自定义图表:通过GDI绘制基础图表,集成AntdUI控件保持设计统一; Blazor Hybrid+Ant Design Blazor:利用Webview2嵌入Blazor图表组件,支持复杂交互; 第三方库(如LightningChart):满足高性能实时图表需求。 关键优化包括GDI性能优化、动态数据绑定、主题定制及跨平台兼容。方案适用 阅读详情

相关推荐

WPF上位机开发:现代工业自动化的技术选择

在工业自动化领域,上位机软件作为连接人机交互的关键组件,其技术选型直接影响系统效能。传统WinForm框架虽然开发简单,但在高分辨率支持、代码维护和跨平台需求方面存在明显局限。WPF(Windows Presentation Foundation)作为微软新一代UI框架,采用XAML声明式编程和MVVM架构模式,完美解决了这些问题。其核心优势包括矢量图形渲染、数据绑定机制和样式模板系统,特别适合工业场景下的HMI开发。通过硬件加速和.NET Core生态,WPF不仅能满足4K/8K显示需求,还能为数字孪生等

weixin_33709590的博客 3921

Blazor Hybrid / MAUI 简介和实战

使用 C# 建立一套用 Blazor 技术的单个共享代码库, HTML 和 CSS的交互式 UI, 可以直接生成多端应用程序 APP

alex_zoucn的博客 7704

大型ASP.NET系统架构演进:从单体到微服务的实战路径

在软件工程中,架构演进是应对业务增长与技术债务的核心命题。当ASP.NET应用面临高并发、模块耦合、部署低效等典型瓶颈时,单纯性能优化已失效,必须启动结构性升级。其本质是围绕可维护性、可扩展性与团队协同能力,对分层设计、服务拆分、数据访问、缓存策略与异步通信等关键维度进行系统性重构。实践中,单体并非原罪,而是合理起点;分层架构提供可控过渡;微服务适用于组织与规模双驱动的成熟阶段;而混合架构则成为多数政企级ASP.NET系统的现实选择。本文聚焦金融、政务、电商等真实场景下的架构决策逻辑、技术选型成本测算及落地

440

PC软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具

前言# 国庆假期各种活动比较多,直到上班才有时间来更新文章~ 不过这两天我还是做了个小玩意(Clipify),起因是想给之前开发来自己用的简单视频剪辑工具 QuickCutSharp 加个功能,不过这个软件是基于 WinForms 开发的,做界面得拖拉控件,感觉繁琐又不灵活,于是索性重新做一个。 原有代码是C#,于是我就继续在这个生态里寻找开发方案,Avalonia、MAUI等都是不错的选择,前...

weixin_36323859的博客 524

C# 桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具

Blazor Hybrid 是 .NET 6 中引入的一个新特性,它允许开发者使用 Blazor 技术开发跨平台的桌面和移动应用程序。Blazor Hybrid 结合了 Blazor WebAssembly 和 Blazor Server 的优势,提供了一种在桌面和移动设备上运行 Blazor 应用的方法。简单来说,Blazor Hybrid 让你可以在传统的桌面应用中使用现代的前端技术(如 HTML、CSS 和 JavaScript),并且仍然可以享受 C# 的强大功能和生态系统的支持。

java专栏 1317

C# WinForms教材库存管理系统设计与实现

教材库存管理是高校教务信息化的基础场景,涉及ISBN精准识别、多终端离线协同、强数据一致性保障等核心需求。其本质是面向教育行业特定工作流的桌面级数据治理系统,需兼顾Windows老旧环境兼容性、低技术门槛操作体验与本地化部署可靠性。C#与.NET WinForms技术栈凭借单文件部署、SQLite轻量嵌入、DataGridView高效绑定及对条码枪/USB外设原生支持等优势,成为替代Excel和微信小程序的务实选择。本文聚焦真实教务痛点——如ISBN科学计数法丢失、Access并发锁表、盘点冲突合并、PDF

weixin_34117211的博客 488

在winform blazor hybrid中绘图

本文介绍了如何在winform blazor hybrid中绘图。

mingupup的博客 1534

BlazorHybridDesktop:Blazor混合桌面测试

BlazorHybridDesktop Blazor混合桌面测试

在Winform中一分钟入门使用好看性能还好的Blazor Hybrid

文件夹,文件夹下面则是项目的界面的组件被细致拆分的组件,这样的好处就是组件易于复用,当然也会对于开发者来说需要一定的能力,但是对于组件界面的可维护性更好!我们只需要使用masa Blazor提供的模板,一分钟入门使用,你要做的只需要去Masa Blazor组件库去CV代码,组件使用的一个默认的布局,当加载指定页面的时候页面的组件会渲染在。的元素进行Blazor组件的绑定绑定到Blazor组件的。的代码,这个是给当前的组件进行路由绑定,资源当加载。中,这就相当于组件的布局的复用性,对于。

xiaohucxy的博客 878

STM32CubeIDE(CUBE-MX hal库)----RTC时钟断电保持与时间校准实战

本文详细介绍了在STM32CubeIDE中使用CUBE-MX和HAL库实现RTC时钟断电保持与时间校准的实战方法。通过硬件配置、后备寄存器(BKP)操作及软件校准策略,确保嵌入式设备在断电后仍能保持准确时间,适用于智能电表、环境监测等物联网应用场景。

weixin_29189373的博客 216

稳定性性能系列之五——Native Crash深度分析:工具实战

深入理解Native Crash的机制与分析方法,掌握addr2line、ndk-stack、gdb等核心工具的实战使用,学会从Tombstone文件中快速定位问题根因

Cheson的专栏 1544

使用Blazor开发WinForm程序

1. 关于BlazorBlazor是微软出品的前端框架,对标谷歌的Flutter,用C#、css、html语言开发前端UI,组件化设计,支持嵌套组件与大多数前端框架react、vue等类似,不同的是开发语言不是JavaScript,但是它可以与JavaScript互操作。Host模式支持Blazor Server、Blazor WebAssembly和Blazor Hybrid(MAUI、WPF、WinForm),可用它来开发Web、移动App、桌面应用。2.创建WinForm步骤打开VS2022,创建新项

cmdos的专栏 1372

intel-VROC raid卡驱动 centos7.9

u盘进入系统,按e,在出现下面在quiet前面输入inst.dd initcall_blacklist=vmd_drv_init 后按Ctrl和x,开始引导。进入系统,按e,在出现下面在quiet前面输入inst.dd inicll_blacklist=vmd_drv_init 后按Ctrl和x,开始引导。驱动完成后,在输入 c 回车, 引导过程开始,进入安装界面。输入1 ,选择这个ISO驱动文件里的rpm包。输入1 ,选择这个ISO驱动文件里的rpm包。vi编辑 /etc/default/grub。

dacming的博客 4540

【基于NET9+Blazor Winform Hybrid 】Openocd工具

BB_OpenOcdTool工具简介 这款基于C# NET9+Blazor Winform Hybrid开发的工具,集成了NET9运行时和OPENOCD程序,支持免安装使用。主要功能包括: 支持CMSIS-DAP和CH347调试器(需自行安装驱动) 提供RTT调试功能,可自定义控制块搜索范围和地址 支持目标处理器程序下载和指定地址擦除 RTT功能包含发送(单次/周期)和接收(16进制/UTF-8显示) 自动保存RTT通信日志,默认TCP端口10086可修改 工具界面直观,适合嵌入式开发调试使用。项目开源地址

一只爱做笔记的码农 192

淋巴结病理数字玻片读取与处理代码

Whole-slide images are generally stored in a multi-resolution pyramid structure. 首先安装openslide模块 pip install openslide-python import os.path as osp import openslide from pathlib import Path...

猫头军师兵书 1276

【云原生技术】K8s 在拉取镜像时报错tls: failed to verify certificate: x509: certificate signed by unknown authority

原因 Kubernetes 节点在拉取镜像时会对 Harbor 的 HTTPS 证书做严格校验; 日志里的核心报错是: ``` tls: failed to verify certificate: x509: certificate signed by unknown authority ``` 说明 Harbor 返回的服务器证书要么是自签发,要么缺少在系统信任链里的根/中级 CA,节点因此拒绝连接。 你需要让 **所有负责拉镜像的节点(containerd 或 Docker 守护进程)

weixin_46453070的博客 2872

从WinForms到Blazor Hybrid低代码迁移:1个.csproj文件搞定跨端可视化编排(附微软内部验证的7步Checklist)

.NET 9低代码开发助力WinForms快速迁移Blazor Hybrid,单.csproj实现跨Windows/macOS/iOS/Android可视化编排。基于微软内部验证的7步Checklist,降低学习成本、提升交付效率,适合企业级桌面+移动混合应用升级。值得收藏

LiteTrans的博客 360

论文深度解析:基于大语言模型的城市公园多维度感知解码与公平性提升

本文针对城市公园感知测量的精细化不足与公平性评估缺口,提出了一套融合社交媒体数据与大语言模型(LLM)的创新分析框架。通过领域适配微调开发的Park-Perception-LLM模型,实现了对感知可达性、可用性、吸引力三大核心维度83%-91%的高精度分类。将该感知指标创新性地融入增强两步浮动集水区法(E2SFCA),以香港高密度城市为案例,系统揭示了公园质量与数量的空间不平等及错配模式。借助多元回归模型,深入挖掘了公园内部特征、宏观建成环境、微观街道景观及时间因素对感知的影响机制。

May the Force be with you 1014

从零构建WinForm分页控件:设计模式与最佳实践

本文详细介绍了如何从零构建WinForm分页控件,涵盖核心架构设计、事件驱动编程模型、性能优化及单元测试策略。通过C#实现高度可复用的分页功能,提升数据密集型应用的性能和用户体验,适用于WinForm开发中的各类场景。

weixin_29295541的博客 336

【软考高级架构】案例题考前突击6——大数据架构

前一类的数据主要由流量方以接口的方式提供(比如对接的腾讯广点通平台),后一类则是某网特有的数据,通过买家的浏览、下单、付款日志算出来。1. 在数据层面只维护一张包含所有指标的MySQL表,表中的stday字段作为索引,stday=当天的保存实时数据,stday<当天的保存离线数据。典型的大数据架构,除了Lambda架构之外,还有kappa架构,这两个架构的区别如下标所示,请补充表中空(1)-(4)第二,实时数据只对接了内部的kafka消息,没有实时的获取第三方的曝光、点击、浏览数据。

qq837993702的博客 66

【Unity工具篇】| Unity项目中如何使用LuBan插件,详细集成步骤

前面写了一篇文章用于介绍LuBan的下载及快速使用方法:【Unity实战篇】| 实用插件LuBan,快速上手使用 本篇文章就来介绍一下将LuBan集成到自己的Unity项目的方法。 看完本篇文章之后,就可以直接把LuBan插件放到自己项目中进行配表和使用。

努力前行,总会成为自己心中的那道光 2万+

winform中也可以这样做数据展示✨

本文通过一个完整的例子,说明了在winform中除了可以用girdcontrol做数据展示外也可以使用Ant Design Blazor中的Table做数据展示。

mingupup的博客 1252

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WinForm工业软件界面美化指南:开源库选型与实战技巧

在工业自动化与设备控制领域,上位机软件的界面设计往往被忽视,但用户体验直接影响操作效率。WinForm作为成熟的技术框架,凭借对老设备驱动和ActiveX组件的良好兼容性,依然是很多工控现场的首选。然而,默认控件风格陈旧,常被诟病“丑陋”。实际上,通过开源控件库(如SunnyUI、AntdUI等)与自绘技术,可以大幅提升界面的颜值与交互流畅度。本文从界面美化的原理出发,探讨如何基于GDI+与双缓冲机制实现高性能渲染,并结合实际应用场景(如数据监控、参数配置、实时曲线)给出选型建议与改造流程。无论你是刚入门还

weixin_42723849的博客 218

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

从WinForms迁移至.NET 9低代码平台的7步安全演进路线(含兼容性检测工具+自动化转换器开源地址)

提供WinForms向.NET 9低代码平台平滑迁移的实操方案,涵盖兼容性检测、代码分析与自动化转换。本.NET 9低代码平台开发教程适用于企业级桌面应用现代化升级,支持渐进式演进与零停机部署。开源工具链已发布,值得收藏。

SimSolve的博客 391

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Rider 2025:.NET 开发者的生产力核弹与跨语言工程实践

IDE(集成开发环境)是现代软件开发的核心基础设施,其本质是编译器、调试器、语言服务与项目系统的智能协同体。原理上,它依赖抽象语法树(AST)解析、符号索引与语义分析引擎实现代码理解;技术价值在于将重复性配置、环境适配与错误预防转化为自动化能力,显著降低认知负荷。典型应用场景覆盖 C# 上位机开发、VB.NET 遗留系统现代化、F# 函数式建模及多语言混合项目协作。尤其在 .NET 生态快速演进(如 .NET 8/9、C# 12、源生成器、AOT 编译)背景下,传统 IDE 易陷入‘能跑’但‘难稳’的困境。

weixin_33824363的博客 335
上一篇: C#中内置的泛型委托Func与Action
下一篇: 在winform blazor hybrid中绘图
mingupup
博客等级 码龄7年 1497粉丝 219原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值