MAUI使用Masa blazor組件庫

上一篇(點擊閱讀)我們實現了UI在Web端(Blazor Server/Wasm)和客戶端(Windows/macOS/Android/iOS)共享,這篇我加上 Masa Blazor[2]組件庫的引用,并把前幾個月寫的時間戳轉換[3]工具加上。

3fde0bf2d182fa3faa7c507c1dca680e.gif

1. 前置知識

關于Masa Blazor請點擊Masa Blazor官網[4]了解:

MASA Blazor

基于Material Design和BlazorComponent的交互能力提供標準的基礎組件庫。提供如布局、彈框標準、Loading、全局異常處理等標準場景的預置組件。

2. 組件庫的引用

組件庫的添加參考Masa官網[5],這里寫下Dotnet9后臺[6]添加記錄:

2.1 UI共享庫的修改-Dotnet9.WebApp

  1. UI共享庫 Dotnet9.WebApp 添加Maas.Blazor包,剛好今天(21號)Masa發布了0.5.0-preview.3版本,我們下載使用:

Install-Package?Masa.Blazor?-Version?0.5.0-preview.3
6057d17a50ea4a5732f0b5722dd89280.png
  1. 封裝Maas.Blazor組件引用

添加文件./MasaExtensions/MasaSetup.cs,代碼如下:

using?Microsoft.Extensions.DependencyInjection;namespace?Dotnet9.WebApp.MasaExtensions;public?static?class?MasaSetup
{public?static?void?AddMasaSetup(this?IServiceCollection?services){if?(services?==?null)?throw?new?ArgumentNullException(nameof(services));services.AddMasaBlazor();???//?這句關鍵代碼}
}

關鍵代碼只有一行services.AddMasaBlazor();,添加擴展類是為了功能擴展,為了其他項目方便使用...

  1. _Imports.razor 引入Masa.Blazor命名空間

@using?Masa.Blazor

就這3步對 Dotnet9.WebApp的修改。

2.2 跨平臺項目修改-Dotnet9.MAUI

  1. 修改MauiProgram.cs文件,添加上面封裝的擴展方法AddMasaSetup():

using?Dotnet9.WebApp.MasaExtensions;????//?第1處:添加這個命名空間namespace?Dotnet9.MAUI;public?static?class?MauiProgram
{public?static?MauiApp?CreateMauiApp(){var?builder?=?MauiApp.CreateBuilder();builder.UseMauiApp<App>().ConfigureFonts(fonts?=>?{?fonts.AddFont("OpenSans-Regular.ttf",?"OpenSansRegular");?});builder.Services.AddMauiBlazorWebView();
#if?DEBUGbuilder.Services.AddBlazorWebViewDeveloperTools();
#endifbuilder.Services.AddMasaSetup();????//?第2外:添加擴展方法引入Masa Blazorreturn?builder.Build();}
}
  1. 添加Masa.Blazor資源文件

修改wwwwroot/index.html文件,添加以下樣式(直接復制 Masa.Blazor[7]Blazor WebAssembly使用的資源文件)

<link?href="_content/Masa.Blazor/css/masa-blazor.css"?rel="stylesheet"?/>
<link?href="_content/Masa.Blazor/css/masa-extend-blazor.css"?rel="stylesheet"?/><link?href="https://cdn.masastack.com/npm/@mdi/font@5.x/css/materialdesignicons.min.css"?rel="stylesheet">
<link?href="https://cdn.masastack.com/npm/materialicons/materialicons.css"?rel="stylesheet">
<link?href="https://cdn.masastack.com/npm/fontawesome/v5.0.13/css/all.css"?rel="stylesheet"><script?src="_content/BlazorComponent/js/blazor-component.js"></script>

2.3 Blazor WebAssembly項目修改-Dotnet9.Wasm

  1. 修改Program.cs文件,添加上面封裝的擴展方法AddMasaSetup():

using?Dotnet9.WebApp;
using?Dotnet9.WebApp.MasaExtensions;????????//?第1處:添加這個命名空間
using?Microsoft.AspNetCore.Components.Web;
using?Microsoft.AspNetCore.Components.WebAssembly.Hosting;var?builder?=?WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<Main>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");builder.Services.AddMasaSetup();????????????//?第2外:添加擴展方法引入Masa Blazor
builder.Services.AddScoped(sp?=>?new?HttpClient?{?BaseAddress?=?new?Uri(builder.HostEnvironment.BaseAddress)?});await?builder.Build().RunAsync();
  1. 添加Masa.Blazor資源文件

Dotnet9.MAUI

2.4 Blazor Server項目修改-Dotnet9.Server

  1. 修改Program.cs文件,添加上面封裝的擴展方法AddMasaSetup():

using?Dotnet9.WebApp.MasaExtensions;????????//?第1處:添加這個命名空間var?builder?=?WebApplication.CreateBuilder(args);//?Add?services?to?the?container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddMasaSetup();????????????//?第2外:添加擴展方法引入Masa Blazorvar?app?=?builder.Build();//?Configure?the?HTTP?request?pipeline.
if?(!app.Environment.IsDevelopment())
{app.UseExceptionHandler("/Error");//?The?default?HSTS?value?is?30?days.?You?may?want?to?change?this?for?production?scenarios,?see?https://aka.ms/aspnetcore-hsts.app.UseHsts();
}app.UseHttpsRedirection();app.UseStaticFiles();app.UseRouting();app.MapBlazorHub();?
app.MapFallbackToPage("/_Host");app.Run();
  1. 添加Masa.Blazor資源文件

修改Pages/_Layout.cshtml文件,添加以下樣式(復制 Masa.Blazor[8]Blazor Server使用的資源文件)

<!--?masa?blazor?css?style?-->
<link?href="_content/Masa.Blazor/css/masa-blazor.css"?rel="stylesheet"?/>
<link?href="_content/Masa.Blazor/css/masa-extend-blazor.css"?rel="stylesheet"?/><!--icon?file,import?need?to?use-->
<link?href="https://cdn.masastack.com/npm/@("@mdi")/font@5.x/css/materialdesignicons.min.css"?rel="stylesheet">
<link?href="https://cdn.masastack.com/npm/materialicons/materialicons.css"?rel="stylesheet">
<link?href="https://cdn.masastack.com/npm/fontawesome/v5.0.13/css/all.css"?rel="stylesheet"><!--js(should?lay?the?end?of?file)-->
<script?src="_content/BlazorComponent/js/blazor-component.js"></script>

注意:MAUI Blazor和Blazor WebAssembly兩個項目引入Masa Blazor資源文件的代碼一樣,Blazor Server和前兩者主要區別是materialdesignicons.min.css文件:

0c3619b11fd0b52d0dc52f5afeb9b3e4.png

這里關于Masa.Blazor的引入就介紹完了,總結下關鍵三步:

  1. 添加Masa.Blazor Nuget包:Install-Package Masa.Blazor

  2. Masa.Blazor組件注冊使用:services.AddMasaBlazor();

  3. 添加Masa.Blazor資源文件:Wasm是wwwwroot/index.html, blazor server是_Layout.cshtml,注意兩者添加資源文件的區別。

3. 時間戳功能的添加

在做Blazor Server版本網站時,有過一次時間戳功能開發的介紹(點擊閱讀[9]),代碼很簡單,這里不再細說,不能再水了....

4. 總結

Masa.Blazor組件庫已經添加,并恢復了時間戳功能,下一步,就是繼續搭建網站后臺了,使用Masa.Blazor搭建框架嘍。

  • 本文Blazor Server站點預覽:https://server.dotnet9.com/

  • 本文Blazor Wasm站點預覽:https://wasm.dotnet9.com/

  • MAUI(Android\Windows\macOS\iOS)預覽:https://github.com/dotnet9/Dotnet9/tree/develop/src/Dotnet9.MAUI(未做發布文件,需要您源碼自行編譯)

參考資料

[1]

點擊閱讀: https://dotnet9.com/2022/06/Share-razor-library-between-maui-and-blazor-server-or-client

[2]

Masa Blazor: https://masa-blazor-docs-dev.lonsid.cn/

[3]

時間戳轉換: https://dotnet9.com/2022/02/Use-Blazor-to-be-a-simple-online-timestamp-conversion-tool

[4]

Masa Blazor官網: https://masa-blazor-docs-dev.lonsid.cn/

[5]

Masa官網: https://masa-blazor-docs-dev.lonsid.cn/

[6]

Dotnet9后臺: https://github.com/dotnet9/Dotnet9

[7]

Masa.Blazor: https://masa-blazor-docs-dev.lonsid.cn/getting-started/installation

[8]

Masa.Blazor: https://masa-blazor-docs-dev.lonsid.cn/getting-started/installation

[9]

點擊閱讀: https://dotnet9.com/2022/02/Use-Blazor-to-be-a-simple-online-timestamp-conversion-tool

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285679.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常用的NSLOG日志打印格式

2019獨角獸企業重金招聘Python工程師標準>>> 常用的NSLOG日志打印格式 以下是常用的LOG打印&#xff0c;如果有特殊&#xff0c;請我 &#xff0c;這邊會不定期更新。 % 對象 %d, %i 整數 %u 無符整形 %f 浮點/雙字 %x, %X 二進制整數 %…

Android studio提示Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.

1、 問題 在Android studio里面運行java的lib庫&#xff0c;但是錯誤提示如下 Build file F:\sourceZip\app\build.gradle line: 2An exception occurred applying plugin request [id: com.android.application] > Failed to apply plugin com.android.internal.applicat…

[轉]淺析DDD(領域驅動設計)

最近在做一些微服務相關的設計&#xff0c;內容包括服務的劃分&#xff0c;Restful API的設計等。其中比較棘手的就是Service的職責劃分&#xff1a;如何抽象具有統一業務范疇的Model&#xff0c;使其模塊化&#xff0c;又如何高度提煉并組合多模塊&#xff0c;使得業務可獨立服…

【PhotoScan精品教程】任務三:生成密集點云、生成網格、生成DEM、生成DOM

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任務一:新建工程、導入照片、設置坐標系、導入控制點(POS)、自由空三 【PhotoScan精品教程】任務二:刺像控點,平差,質量報告精度檢查,像控點POS權重調配 【PhotoScan…

windows環境實現批量加密文件,并創建加密文件同名(不帶后綴)的文件夾,然后把加密文件和圖片和文本放入這個文件夾。

1、 需求 我想把資源文件先加密成壓縮文件&#xff0c;然后同時創建每個加密壓縮文件同名的文件夾&#xff0c;同時需要把這個加密文件拷貝到這個同名的文件夾&#xff0c;然后還需要把一個圖片和一個文本文檔同時放進這個文件夾&#xff0c;然后在不加密壓縮這個文件夾&#…

.NET7之MiniAPI(特別篇) :Preview5優化了JWT驗證(上)

在.NET7的Preview5中&#xff0c;優化了asp.net core中的JWT驗證&#xff0c;不用像以前繁瑣了&#xff0c;更重要的是帶來了一組生成Token的工具&#xff0c;可以讓開發人員或測試人員不需登錄獲取Token&#xff0c;而達到測試的目的。創建項目現在來看一下怎么使用&#xff0…

iOS - UTI

一、UTI概念 1、什么是UTI Uniform Type Identifier&#xff0c;是字符串&#xff0c;格式標識符。 根據UTI&#xff0c;可得到相應的其他類型的格式標識符。比如public.jpeg對應于&#xff1a; A four-character file type code (an OSType) of JPEGA filename extension of .…

【Inpho精品教程】任務一:Inpho預處理準備(Pix4d生成未畸變圖像、Pix4d生成相機參數文件)

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) Inpho軟對于初學者來說,可能不像pix4d、PhotoScan等那么得心應手,處理過程也稍微有些復雜。Inpho處理的是POS分離的照片,在新建工程之前,需要獲取相機參數、未畸變圖像等,而這些前期的工作一…

學習MongoDB(三) Add an Arbiter to Replica Set 集群中加入仲裁節點

Add an Arbiter to Replica Set 在集群中加入仲裁節點&#xff0c;當集群中主節點掛掉后負責選出新的主節點&#xff0c;仲裁節點也是一個mongo實力&#xff0c;但是它不存儲數據。 1、仲裁節點消耗很小的資源&#xff0c;而且不需要專用的服務器。 2、不能把仲裁節點安裝到集…

[轉]new Thread的弊端及Java四種線程池的使用

介紹new Thread的弊端及Java四種線程池的使用&#xff0c;對Android同樣適用。本文是基礎篇&#xff0c;后面會分享下線程池一些高級功能。 1、new Thread的弊端 執行一個異步任務你還只是如下new Thread嗎&#xff1f; new Thread(new Runnable() {Overridepublic void run() …

【Inpho精品教程】任務二:Inpho創建工程(創建項目、新建相機參數、導入照片、導入POS、生成航條、保存項目)

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 在任務一中,我們做了Inpho創建工程前的數據預處理工作,獲取了未畸變的圖像、相機參數、Inpho支持的POS等數據,本文在此基礎之上,創建Inpho工程,主要步驟有:創建項目、新建相機參數、導入照片…

return view詳解

1、return View(); 返回值 類型&#xff1a;System.Web.Mvc.ViewResult將視圖呈現給響應的 View() 結果。 注釋 View() 類的此方法重載將返回一個具有空 ViewName 屬性的 ViewResult 對象。 如果你正在編寫控制器操作的單元測試&#xff0c;則需為那些不采用字符串視圖名稱的單…

C語言試題九十一之寫一個程序,用公式π/4=1-1/3+1/5-1/7+...,求π的近似值,直到最后一項的絕對值小于10^-8為止。

1、題目 寫一個程序,用公式π/4=1-1/3+1/5-1/7+...,求π的近似值,直到最后一項的絕對值小于10^-8為止。 2 、溫馨提示 C語言試題匯總里可用于計算機二級C語言筆試、機試、研究生復試中C程序設計科目、幫助C語言學者打好程序基礎、C語言基礎,鍛煉您的邏輯思維和解決問…

C# 切換中英文輸入法

本文經原作者授權以原創方式二次分享&#xff0c;歡迎轉載、分享。原文作者&#xff1a;唐宋元明清原文地址&#xff1a;https://www.cnblogs.com/kybs0/p/10298697.htmlC# 切換中英文輸入法在界面輸入時&#xff0c;有時需要限定輸入法。在不自定義正則表達式或者其它輸入處理…

[轉].NET 開源項目 Polly 介紹

今天介紹一個 .NET 開源庫&#xff1a;Polly&#xff0c;它是支持 .NET Core 的&#xff0c;目前在 GitHub 的 Star 數量已經接近 5 千&#xff0c;它是一個強大且實用的 .NET 庫。 Polly 介紹 官方對 Polly 的介紹是這樣的&#xff1a; Polly is a .NET resilience and tran…

「 劉一哥GIS」CSDN專業技術博文專欄目錄索引

劉一哥GIS 個人簡介&#xff1a;劉一哥&#xff0c;多年研究地圖學、地理信息系統、遙感、攝影測量和GPS等應用&#xff0c;精通ArcGIS等軟件的應用&#xff0c;精通多門編程語言&#xff0c;擅長GIS二次開發和數據庫系統開發&#xff0c;具有豐富的行業經驗&#xff0c;致力于…

memcached 和 redis 的區別與選擇

沒有必要過多的關注性能。由于Redis只使用單核&#xff0c;而Memcached可以使用多核&#xff0c;所以在比較上&#xff0c;平均每一個核上Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中&#xff0c;Memcached性能要高于Redis&#xff0c;雖然Redis最近也在存儲…

C語言試題九十之實現輸入一行字符,分別統計出其中英文字母、空格、數字和其他字符的個數。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 輸入一行字…

數據庫備份需要注意的

2019獨角獸企業重金招聘Python工程師標準>>> 1、PHPMYADMIN無法導出大數據表的 如果你的數據庫中有上百個數據表&#xff0c;并且有很多數據表記錄都超過了1G&#xff0c;還有很多INNODB數據表&#xff0c;這個時候用PHPMYADMIN導出&#xff0c;你就會發現恢復后可能…

在 .NET 6 中使用 dotnet format 格式化代碼

我不得不承認&#xff0c;在 code review 的時候&#xff0c;我花費了很多時間來研究 C# 的代碼格式問題&#xff0c;這是沒有太大意義的工作&#xff0c;我應該專注于其他事情&#xff0c;而不是觀察同事是否忘記格式化代碼&#xff0c;或者是使用了其他不同規則的代碼編輯器。…