[MAUI]深入了解.NET MAUI Blazor与Vue的混合开发

避坑,c#开发人员学习开发app时.NET MAUI和Vue3 选择 适合需要高性能原生应用、已有C#技术积累、或需快速迭代企业级应用(如内部工具、数据采集App)的场景。典型案例:跨平台办公软件、物联网设备控制端。适合轻量级应用、偏好Web技术栈、或需高度定制UI(如电商、社交类App)。经过一段时间学习vue3后才发现作为一个C#背景的开发人员从开发效率、调试便捷性、部署便利性考虑,建议优先尝试.NET MAUI,若项目需求偏向Web或已有Vue3经验,再考虑后者。是更合适的选择,尤其是在跨平台原生应用开发场景中。 阅读详情


.NET MAUI结合Vue的混合开发可以使用更加熟悉的Vue的语法代替Blazor语法,你现有项目不必重写。之前写过一篇 [MAUI] 在.NET MAUI中结合Vue实现混合开发 ,其中介绍了如何创建一个vue应用并将其打包至MAUI项目,这种方式依赖vue-cli创建和打包静态站点,好处是可以使用Node.js 的构建但MAUI仅仅作为容器。开发应用需要一个独立的host项目

这次用集成的方式。将vue作为MAUI的一部分,这样就可以在MAUI项目中直接使用vue了。

在这里插入图片描述

Vue在混合开发中的特点

首先要说的是,Vue框架是渐进性的,所谓渐进性,就是Vue不会强求你使用所有的框架特性,你可以根据需要逐步使用。

同样地,element-ui也可以通过引入样式和组件库,配合Vue使用

因此我们不需要Vue Router、Vuex、Vue CLI、单文件组件这些高级特性,仅仅引入Vue.js即可使用Vue模板语法。我们将利用Blazor引擎的如下功能:

  • 组件化开发
  • 静态资源管理
  • js代码的注入
  • js调用C#代码
  • C#调用js代码

由.NET MAUI提供的功能:

  • 路由管理
  • 状态管理

由Vue提供模板语法,事件处理,计算属性/侦听器等,以及Element-UI提供交互组件。

创建MAUI项目

创建一个MAUI项目,这里使用的是Visual Studio 2022 17.7.3,创建一个Blazor MAUI App项目命名MAUI-Vue-Hybriddev-Integrated,选择Android和iOS作为目标平台,选择.NET 7.0作为目标框架。

在这里插入图片描述

从Vue官网下载最新的Vue.js

在这里插入图片描述

将其放置在wwwroot目录下,然后在index.html中引入
在这里插入图片描述

    <script src="lib/vuejs/vue.js"></script>

创建Vue应用

在Views目录下创建 HomePage.xaml作为Vue应用的容器,在页面中创建<BlazorWebView>视图元素,并设置HostPage为wwwroot/index.html,这样就可以在MAUI中使用Vue了。

<BlazorWebView x:Name="blazorWebView"
               HostPage="wwwroot/index.html">
    <BlazorWebView.RootComponents>
        <RootComponent Selector="#app"
                       x:Name="rootComponent"
                       ComponentType="{x:Type views:HomePageWeb}" />
    </BlazorWebView.RootComponents>
</BlazorWebView>

每个BlazorWebView控件包含根组件(RootComponent)定义,ComponentType是在应用程序启动时加载页面时的类型,该类型需要继承自Microsoft.AspNetCore.Components.IComponent,由于我们的导航是由MAUI处理的,因此我们不需要使用Blazor路由,直接使用Razor组件

在Views目录下创建HomePageWeb.razor,这是Vue应用页面相当于Vue的单文件组件,这里可以使用Vue的模板语法,而不是Blazor的Razor语法。
在这里插入图片描述

我们在HomePageWeb.razor中写下Vue官方文档中Hello Vue示例代码


<div id="vue-app">
    {{ message }}
</div>


<script type="text/javascript">
    var app = new Vue({
        el: '#vue-app',
        data: {
            message: 'Hello Vue!',
        }
    })

</script>

注意:Vue的根元素名称不要跟Blazor的根元素名称相同,否则会报错。

在这里插入图片描述

此时更改JavaScript里的内容,你会发现Blazor页面不会热加载。

请勿将 <script> 标记置于 Razor 组件文件 (.razor) 中,因为 <script> 标记无法由Blazor 动态更新。

于是需要将script部分代码放置在外部,此时有两种方案,一个是放在wwwroot/js目录下,然后在wwwroot/index.html中引入,还有一种是使用并置的js文件,这种方式是所谓的"CodeBehind",因为更利于组织代码,这里我们使用并置的js文件。

创建一个HomePageWeb.razor.js文件,将script部分代码放置在其中,然后在HomePageWeb.razor中引入

在这里插入图片描述

protected override async Task OnAfterRenderAsync(bool firstRender)
{

    if (firstRender)
    {
        await JSRuntime.InvokeAsync<IJSObjectReference>("import", "./Views/HomePageWeb.razor.js");
    }
}

发布应用后,框架会自动将脚本移动到 Web 根目录。 在此示例中,脚本被移动到./wwwroot/Views/HomePageWeb.razor.js

使用element-ui组件库

同样,我们在element-ui官方CDN下载样式文件和组件库,首先在index.html中引入样式和组件库

<link href="css/app.css" rel="stylesheet" />
...
<script src="lib/element-ui/index.js"></script>

然后在HomePageWeb.razor中使用组件

<div id="vue-app">
    {{ message }}
    <el-input v-model="input" placeholder="请输入内容"></el-input>
    <el-button @click="showDialog = true">提交</el-button>
    <el-dialog :visible.sync="showDialog" title="消息">
        <p>{{input}}</p>
        <p>提交成功</p>
    </el-dialog>
</div>

CodeBehind中引入组件

var app = new Vue({
    el: '#vue-app',
    data: {
        message: 'Hello Vue!',
        showDialog: false,
        input: 'text message from vue'
    }
})

运行效果如下:

在这里插入图片描述

在这里插入图片描述

JavaScript和原生代码的交互

Blazor组件中的代码可以通过注入IJSRuntime来调用JavaScript代码,JavaScript代码可以通过调用DotNet.invokeMethodAsync来调用C#代码。

传递根组件参数

如果被调用的代码位于其他类中,需要给这个Blazor组件传递实例,还记得刚才提及的根组件(RootComponent)吗?我们用它来传递这个实例,称之为根组件参数,详情请查看官方文档 在 ASP.NET Core Blazor Hybrid 中传递根组件参数

创建SecondPage.xaml,根据刚才的步骤创建一个BlazorWebView并注入vuejs代码
html部分创建一个el-dialog组件,当消息被接收时,显示对话框


@using Microsoft.Maui.Controls
@inject IJSRuntime JSRuntime

<div id="vue-app">
    {{ message }}
    <el-dialog :visible.sync="showDialog" title="Native device msg recived!">
        <p>{{msg}}</p>
    </el-dialog>
</div>

在@code代码段中创建SecondPage对象。


@code {

    [Parameter]
    public SecondPage SecondPage { get; set; }

    ...
}

回到SecondPage.xaml.cs,在构造函数中将自己传递给根组件参数

public SecondPage()
{
    InitializeComponent();
    rootComponent.Parameters =
        new Dictionary<string, object>
        {
            { "SecondPage", this }
        };
}


从设备调用Javascript代码

在SecondPage.xaml中,创建一个Post按钮,点击按钮后将文本框PostContentEntry的内容传递给Vue代码

<StackLayout Grid.Row="1">
    <Entry x:Name="PostContentEntry" Text="Hello,this is greetings from native device"></Entry>
    <Button Text="Post To Vue"
            HorizontalOptions="Center"
            VerticalOptions="End"
            HeightRequest="40"
            Clicked="Post_Clicked"></Button>

</StackLayout>

在这里插入图片描述

在SecondPage.razor.js中, 创建greet方法,用于接收从原生代码传递过来的参数,并显示在对话框中。

window.app = new Vue({
    el: '#vue-app',
    data: {
        message: 'Vue Native interop',
        showDialog: false,
        msg: ''
    },
    methods: {
        greet: function (content) {
            this.msg = content;
            this.showDialog = true;
        }

    },

在SecondPage.xaml.cs中,创建一个OnPost事件,当Post按钮被点击时触发该事件


public event EventHandler<OnPostEventArgs> OnPost;

private void Post_Clicked(object sender, EventArgs args)
{
    OnPost?.Invoke(this, new OnPostEventArgs(this.PostContentEntry.Text));
}


在SecondPage.razor中,订阅OnPost事件,当事件被触发时,调用greet方法,将参数传递给JavaScript代码


public async void Recived(object o, OnPostEventArgs args)
{
    await JSRuntime.InvokeAsync<string>("window.app.greet", args.Content);
}

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    try
    {
        if (firstRender)
        {
            SecondPage.OnPost += this.Recived;

            await JSRuntime.InvokeAsync<IJSObjectReference>(
"import", "./Views/SecondPageWeb.razor.js");

        }


    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }

}

在页面销毁时,要取消订阅事件,避免内存泄漏。


@implements IDisposable

...

public void Dispose()
{
    SecondPage.OnPost -= this.Recived;
}


运行效果如下

在这里插入图片描述

从Vue页面调用原生代码

原生代码指的是.NET MAUI平台的C#代码,比如要在设备上显示一个弹窗,需要调用Page.DisplayAlert方法,它隶属于Microsoft.Maui.Controls命名空间,属于MAUI组件库的一部分。

因此需要将MAUI类型的对象通过引用传递给JavaScript调用,调用方式是通过将对象实例包装在 DotNetObjectReference 中传递给JavaScript。使用该对象的invokeMethodAsync从 JS 调用 .NET 实例方法。详情请查看官方文档 JavaScript 函数调用 .NET 方法

在@code代码段中,界面加载时创建DotNetObjectReference对象

@code {
    private DotNetObjectReference<SecondPageWeb>? objRef;


    protected override void OnInitialized()
    {
        objRef = DotNetObjectReference.Create(this);
    }

页面加载完成时,将DotNetObjectReference对象传递给JavaScript代码


protected override async Task OnAfterRenderAsync(bool firstRender)
{
    try
    {
        if (firstRender)
        {
            SecondPage.OnPost += this.Recived;

            await JSRuntime.InvokeAsync<IJSObjectReference>(
"import", "./Views/SecondPageWeb.razor.js");
            await JSRuntime.InvokeAsync<string>("window.initObjRef", this.objRef);

        }


    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }

}

window.app = new Vue({
    
    ...

    data: {
        ...
        objRef: null
    },
    
})
window.initObjRef = function (objRef) {
    window.app.objRef = objRef;
}

在SecondPage.razor中,创建el-input组件和el-button组件,当按钮被点击时,调用Post方法,将文本框的内容传递给原生代码

<div id="vue-app">
    {{ message }}
    <el-input v-model="input" placeholder="请输入内容"></el-input>
    <el-button @click="post">Post To Native</el-button>
    <el-dialog :visible.sync="showDialog" title="Native device msg recived!">
        <p>{{msg}}</p>
    </el-dialog>
</div>

按钮和对话框的显示逻辑与之前相同,不再赘述。

在这里插入图片描述

在SecondPage.razor中,创建Post方法,方法被调用时,将触发MAUI组件库的原生代码

[JSInvokable]
public async Task Post(string content)
{
    await SecondPage.DisplayAlert("Vue msg recived!", content, "Got it!");

}

vue绑定的函数中,调用DotNet.invokeMethodAsync将文本框的内容传递给原生代码


window.app = new Vue({
    el: '#vue-app',
    data: {
        message: 'Vue Native interop',
        showDialog: false,
        msg: '',
        input: 'Hi, I am a text message from Vue',
        deviceDisplay: null,
        objRef: null
    },
    methods: {
        greet: function (content) {
            this.msg = content;
            this.showDialog = true;
        },
        post: function () {
            this.objRef.invokeMethodAsync('Post', this.input);
        }


    }
})

运行效果如下

在这里插入图片描述

读取设备信息

可以使用Vue的watch属性监听数据变化,当MAUI对象加载完成时,调用原生代码,读取设备信息

<div id="vue-app">

    ...

    <p>Device Display</p>
    <p>{{deviceDisplay}}</p>
</div>

CodeBehind代码如下:

watch: {
    objRef: async function (newObjRef, oldObjRef) {
        if (newObjRef) {
            var deviceDisplay = await this.objRef.invokeMethodAsync('ReadDeviceDisplay');
            console.warn(deviceDisplay);
            this.deviceDisplay = deviceDisplay;
        }

    }
},

原生代码如下:


[JSInvokable]
public async Task<string> ReadDeviceDisplay()
{
    return await Task.FromResult(SecondPage.ReadDeviceDisplay());

}

在ReadDeviceDisplay方法中,我们读取设备分辨率、屏幕密度、屏幕方向、屏幕旋转、刷新率等信息

public string ReadDeviceDisplay()
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();

    sb.AppendLine($"Pixel width: {DeviceDisplay.Current.MainDisplayInfo.Width} / Pixel Height: {DeviceDisplay.Current.MainDisplayInfo.Height}");
    sb.AppendLine($"Density: {DeviceDisplay.Current.MainDisplayInfo.Density}");
    sb.AppendLine($"Orientation: {DeviceDisplay.Current.MainDisplayInfo.Orientation}");
    sb.AppendLine($"Rotation: {DeviceDisplay.Current.MainDisplayInfo.Rotation}");
    sb.AppendLine($"Refresh Rate: {DeviceDisplay.Current.MainDisplayInfo.RefreshRate}");

    var text = sb.ToString();
    return text;
}

当页面加载时,会在HTML页面上显示设备信息

在这里插入图片描述
​

项目地址

Github:maui-vue-hybirddev

关注我,学习更多.NET MAUI开发知识!

​

MAUI与Blazor共享一套UI,媲美Flutter,实现Windows、macOS、Android、iOS、Web通用UI 距离上次发《MAUI初体验:爽》一文已经过去2个月了,本计划是下半年或者明年再研究MAUI的,现在计划提前啦,因为我觉得MAUI Blazor挺有意思的:在Android、iOS、macOS、Windows之间共享UI,一处UI增加或者修改,就能得到一致的UI体验。看看这篇文章《Blazor Hybrid/MAUI 简介和实战》对MAUI Blazor的说明:今天就分享如何在Blazor Server、Blazor Wasm、MAUI Blazor之间共享UI的实验,这一步完成,后面开发应用时就方便多了(只 阅读详情

相关推荐

maui blazor开发app 试写一个简单的登陆界面

而MAUI更是能够实现跨平台开发,现在还发现了MAUI Blazor,简直就像是购买了一瓶白酒,里面还意外中了一张奖券,全都是额外赠送的好处。多年前,我在开发ASP.NET MVC时曾使用Blazor构建了一个烘手器的网站,并成功将其优化至百度搜索排名第一。pages下面有三个子页,通过分析NavMenu.razor 则点击菜单跳转到href,跳转到三个页面中的一个。wwwroot下的index.html感觉是一个WEB服务一样,这里的/表示把 定义的路由页当首页。菜单NavMenu.razor。

大白菜代码的博客 2321

[MAUI] 在.NET MAUI中结合Vue实现混合开发

在MAUI微软的官方方案是使用Blazor开发,但是当前市场大多数的Web项目使用Vue,React等技术构建,如果我们没法绕过已经积累的技术,用Blazor重写整个项目并不现实。 Vue是当前流行的web框架, 简单来说是一套模板引擎,利用“模板”和“绑定”两大特性实现web页面mvvm模式开发。利用.NET MAUI框架可以将Vue应用嵌入到Web容器中。可以实现跨平台的混合开发。 例如我在某医疗行业项目中,已经用这个混合开发的方式生成应用,Vue代码不需要做什么改动,就能跨平台运行: 如果你

jevonsflash的专栏 8676

Blazor与Vue:.NET下可维护性的对比

Blazor基于C#语言和.NET生态系统,而Vue则使用JavaScript和Vue生态系统,开发者可以根据自己的喜好和项目需求选择适合的框架。Blazor利用C#语言和.NET工具生态系统的优势,而Vue则通过组件化的结构提供了更灵活和模块化的代码编写方式。Vue则使用JavaScript和Vue生态系统,通过组件化的结构和灵活的数据绑定方式实现了可维护性强的开发模式。Blazor和Vue都是在.NET开发环境下可维护性强的前端框架,它们在代码结构、组件化、数据绑定和工具生态系统等方面都有各自的优势。

library_git106的博客 1423

学习.NET MAUI Blazor(二)、MAUI是个啥

`.NET MAUI,全称.NET Multi-platform App UI` 顾名思义,就是跨平台UI框架。使用.NET MAUI,**理论**上使用一套代码就可以开发出可运行在 Android、iOS、macOS 和 Windows 上的应用

What If... 4535

Comsol 弧形声学换能器声聚焦仿真

1. 弧度和曲率半径:弧形声学换能器的形状和曲率半径对声聚焦效果有重要影响。通常,较小的曲率半径和较大的弧度可以实现更强的声聚焦效果。弧形声学换能器声聚焦是指将声波能量集中在弧形声学换能器的特定区域内,以实现更强的声场强度和分辨率。4. 数值仿真和优化:使用声学仿真软件进行数值仿真可以帮助设计和优化弧形声学换能器的声聚焦效果。通过调整几何参数、材料特性和激励信号等参数,可以模拟和优化声聚焦效果。2. 激励信号:通过调整激励信号的频率和幅值,可以实现声波在弧形声学换能器中的聚焦效果。

声学黑洞仿真工作室 1618

vasp计算练习1-Si

si的vasp训练流程

qq_41074165的博客 3299

Blazor 混合开发_MAUI+Vue_WPF+Vue

在 MAUI 微软的官方方案是使用 Blazor 开发,但是当前市场大多数的 Web 项目使用 Vue、React 等技术构建,用Blazor重写整个项目并不现实。利用 .NET MAUI 框架可以将 Vue 应用嵌入到 Web 容器中,可以实现跨平台的混合开发。将 dist 文件夹下的所有文件复制到容器项目下的 wwwroot 文件夹下。Vue 是当前流行的 Web 框架, 简单来说是一套模板引擎,利用。第一个参数是容器项目的 Namespace,第二个参数是要调用的方法。导入 namespace。

视觉软件 2822

分位数映射数据后处理-Quantile Mapping后处理 (R语言)

统计后处理器基本上是统计模型,将观察到的关注变量与从气象或水文模型的直接模型输出(DMO)导出的适当预测变量相关联。统计后处理的重要性早已在气象预报中得到认可。早期的工作包括完善的预测(perfect prognosis),模型输出统计(MOS)和模拟方法(analog method)等模型。 近年来,已经提出了许多其他后处理方法,包括秩直方图校准(rank histogram calibrati...

水滴石穿,绳锯木断 1万+

[MAUI] 混合开发概念

混合开发的概念是相对与原生开发来说的:App不直接运行原生程序,而是在原生程序中运行一个Web程序,原生程序中包含Web运行时,用于承载Web页面。暂且将原生应用称之为Web容器,Web容器应该能让JavaScript代码与原生平台的代码交互,互相调用,同时为上层提供交互逻辑,例如导航,事件,Cookie,刷新等内容。 之前使用Xamarin可以利用WebView控件做混合开发,但是到目前为止WebView功能还是比较孱弱。用WebView实现混合开发主要是通过重写各个平台的自定义呈现器(Renderer

jevonsflash的专栏 3068

《数学建模与数学实验》第5版 线性规划 习题3.4

1. 某鸡场有1000只鸡,用动物饲料和谷物混合喂养. 2. 某工厂用A1,A2两台机床加工B1,B2,B3三种不同零件. 3. 某工厂利用两种原料甲、乙生产$A_1、A_2、A_3$三种产品. 4. 每班的护士在值班开始时向病房报到,连续工作8个小时. 5. 某工厂生产 A1 、A2 两种型号的产品 6. 有两个煤厂A,B 7. 某工厂制造三种产品,生产这三种产品需要三种资源 8. 已知某工厂计划生产1,2,3三种产品,各产品需要在ABC设备加工。...

hexiaosi_的博客 2万+

OpenClaw 源代码深度分析报告 &如何把企业自有的MCP server 工具集成到OpenClaw里? 怎样通过OpenAI 风格SDK 解析出来OpenClaw的全部的流式输出内容?

项目属性详情名称OpenClaw版本2026.3.2许可证MIT语言最低运行时包管理器pnpm主要仓库},// 注册工具// 工具实现},});// 注册命令" }),});},方面评价模块化设计⭐⭐⭐⭐⭐ 插件架构清晰,扩展性强协议设计⭐⭐⭐⭐⭐ WebSocket 协议完善,支持多种客户端多渠道支持⭐⭐⭐⭐⭐ 20+ 消息通道,覆盖主流平台安全机制⭐⭐⭐⭐ 配对认证、设备签名、权限控制完善本地优先⭐⭐⭐⭐⭐ 数据本地存储,用户完全控制项目属性详情名称OpenClaw版本。

AI天才研究院 941

学习.NET MAUI Blazor(一)、Blazor是个啥?

.NET Blazor(以下统称Blazor)是.NET Core 3.0推出的一个Web UI框架,如果对Vue比较熟悉的话,会感觉它们及其类似,毕竟嘛,现代前端框架的底层逻辑都基本一致(DOM差量更新、响应式、组件化等)。

What If... 2840

如何在非序列模式下使用类似图像模功能

如何在非序列模式下使用类似图像模功能

weixin_72050316的博客 552

[MAUI]集成高德地图组件至.NET MAUI Blazor项目

地图组件在手机App中常用地理相关业务,如查看线下门店,设置导航,或选取地址等。是一个较为常见的组件。在.NET MAUI 中,有两种方案可以集成高德地图,一种是使用原生库绑定。但这种方案需要大量平台原生开发的知识,而且需要对每一个平台进行适配。在这里我介绍第二种方案:.NET MAUI Blazor + 高德地图JS API 2.0 库的实现。JS API 2.0 是高德开放平台基于WebGL的地图组件,可以将高德地图模块集成到.NET MAUI Blazor中的BlazorWebView控件。

jevonsflash的专栏 2214

使用R语言读取和处理CSV数据集

查看数据集的结构str(data)# 查看数据集的摘要统计信息str()函数将显示数据集的结构信息,包括变量名称、类型和前几行的值。summary()函数将提供数据集的摘要统计信息,如均值、中位数、最小值、最大值等。

CyberGenius的博客 3856

基于Python的Booking酒店数据爬虫实战:最新技术与完整代码解析

本文将详细介绍如何使用Python构建一个高效的Booking酒店数据爬虫,涵盖从基础爬取到高级反反爬技术的完整实现。我们将使用最新的Python爬虫技术栈,包括requests-html、Playwright、智能代理轮换等技术,并提供完整的可运行代码示例。文章将深入探讨爬虫的各个组成部分,包括数据提取、存储、反反爬策略以及性能优化等方面。关键词:Python爬虫、Booking数据采集、反反爬技术、Playwright、数据存储。

2201_76125261的博客 936

Blazor 概述、与Vue/React综合比较以及应用场景探讨

Blazor 是一个强大且灵活的框架,凭借其统一的技术栈和强大的生态系统,适合构建各种现代 Web 应用。从简单的入门教程开始,到深入了解组件、状态管理和 API 集成,你可以逐步掌握 Blazor 的强大能力,并通过参与开源项目或实际应用开发来提升技能。无论你是 .NET 开发者,还是想尝试前端开发的后端工程师,Blazor 都是一个非常值得学习的选择!Blazor 是一个为 .NET 开发者量身定制的工具,其最大优势在于开发一致性和生态整合。

码事漫谈 2219

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

淘汰过时的工具也有错?微软的 Blazor 框架会是下一个 SilverLight?

在 HTML5 的冲击下,和 Adobe Flash Player 的发展趋势相类似,微软投入十几年时间打造的 Silverlight 最终也走向消亡,原因主要是 Silverlight 的安全性和性能无法实现理想状态。据官方消息,微软将于 2021 年 10 月 12 日停止对 Silverlight 的官方支持。 与此同时,微软在彼时宣布准备弃用 Silverlight 时也给出了另一替代解决方案,即发布一款名为 Blazor 的新框架。据官方介绍,Blazor 分为服务端模式和客户端应用的 WebAs

一起来捉 Bug 呀~~ 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

基于最新的MAUI混合VUE3开发Android应用(2022-11-01)

微软MAUI框架集成VUE3开发,支持js调用C#方法

weixin_46545658的博客 5340

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

.NET开发主流框架全方位对比分析

.NET主流框架概览 ASP.NET Core是高性能跨平台Web框架,支持Razor Pages和MVC模式,适合现代Web开发。.NET MAUI取代Xamarin,用于构建跨平台原生应用,支持单一代码库多平台部署。Blazor允许使用C#开发交互式Web UI,提供服务器和WebAssembly两种托管模式。WPF仍是构建Windows桌面应用的首选,具备丰富的UI定制能力。Entity Framework Core作为主流ORM,简化数据访问并支持多种数据库。SignalR专为实时Web功能设计,自

百锦再的博客 4329

WinForm、WPF、MAUI、Blazor,考虑哪些因素?

纯个人观点:现在用.net还在开发桌面程序的,基本上都在工业和制造业领域. 这种环境下面,基本上不分啥前端后端, 都是一个人从头干到尾.选自己熟悉的技术就行.如果要注重界面开发就要抛开.net这个大环境看, 比如现在微软主推的MAUI, 还有WebView2, Electron, QT等.另外既然考虑界面了,大多数情况下可以选择Web方式. 可以服务端和设备通信,或者Web和桌面混合开发.现在还有...

dotNET跨平台 884

.net framework开发winform_基于.NET 5.0跨平台全栈开发福音来了

2020.11.10日DOTNET正式发布.NET 5.0,.NET 5.0 是 3.1 之后 .NET Core 的下一个主要版本,可以理解为.NET 5.0 = .net core vnext。为不叫 .NET Core 4.0 官网上描述主要有两个原因:1. 跳过了版本号 4.x 以避免与 .NET Framework 4.x 混淆;2. 从名称中删除了"Core",以强调这是 .NET 前...

weixin_39602891的博客 5691

从零构建跨平台桌面应用,C# + .NET MAUI 9.0实战全流程详解

掌握C#实现跨平台桌面应用(.NET MAUI 9.0+Blazor Hybrid)的完整流程,解决多平台开发效率难题。涵盖环境搭建、界面设计、前后端集成及发布部署,适用于Windows、macOS和Linux应用开发。融合Blazor Hybrid的Web与原生优势,提升开发效能,值得收藏。

PoliSeed的博客 1296

3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?

在Web开发领域,前端技术栈的演进速度令人目不暇接。从传统的JavaScript、jQuery到Angular、React、Vue等现代前端框架,开发者们一直在追求更高效、更强大、更易维护的解决方案。然而,对于广大的.NET开发者而言,长期以来,前端开发意味着需要跳出C#的舒适区,学习并掌握一套全新的语言(JavaScript/TypeScript)和框架。这种技术栈的分裂,不仅增加了学习成本,也导致了前后端开发协作中的诸多不便。

喵叔 3160

学习.NET MAUI Blazor(四)、路由

Web应用主要是使用a标签或者是服务端redirect来跳转。而现在流行的单页应用程序 (SPA) ,则通过路由(Router)来实现跳转,如Vue 、React等。在.NET MAUI Blazor应用中,路由是遵循Blazor的路由规则。也是通过路由组件(Router)实现的

What If... 2523
上一篇: [MAUI]实现动态拖拽排序网格
下一篇: ExcelPatternTool 开箱即用的Excel工具包现已发布!
林晓lx
林晓lx 2017年优快云移动跨平台大赛优秀奖获得者 2017年优快云移动跨平台大赛优秀奖获得者
博客等级 码龄15年 3761粉丝 123原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林晓lx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值