[翻譯] .NET 官宣跨平臺 UI 框架 MAUI

来源:https://www.cnblogs.com/hez2010/archive/2020/05/20/12920729.html
-Advertisement-
Play Games

MAUI Build 2020 大會上,微軟終於正式公佈 .NET 上的跨平臺框架,正式版將在 .NET 6 和大家見面。 MAUI 是日益流行的 Xamarin.Forms 的進化,Xamarin.Forms 已經有6年曆史了。 多年來,UPS,Ernst&Young 和 Delta 等公司一直在 ...


MAUI

Build 2020 大會上,微軟終於正式公佈 .NET 上的跨平臺框架,正式版將在 .NET 6 和大家見面。

MAUI 是日益流行的 Xamarin.Forms 的進化,Xamarin.Forms 已經有6年曆史了。 多年來,UPS,Ernst&Young 和 Delta 等公司一直在利用 .NET 上的 Xamarin 來推動其業務發展。它在幫助小型企業最大化其 95% 以上代碼共用的開發投資並擊敗競爭對手進入市場方面也非常成功。

MAUI 將這一成功擴展到移動設備上,使其包含桌面設備,這是跨兩者構建多平臺應用程式的最佳方法,尤其是新設備(例如新的Surface Duo)。

MAUI 簡化了.NET開發人員的選擇,提供了一個堆棧來支持所有現代工作負載:Android,iOS,macOS 和 Windows。 每個平臺和 UI 控制項的本機功能都可以通過一個簡單的跨平臺 API 觸手可及,您可以在提供不妥協的用戶體驗的同時共用比以前更多的代碼。

單一項目開發體驗

MAUI 的構建考慮了開發人員的生產力,包括開發人員需要的項目系統和跨平臺工具。MAUI 將項目結構簡化為一個針對多個平臺的項目,這意味著您只需單擊一下滑鼠,便可以輕鬆地將其部署到所需的任何目標,包括台式機,模擬器,模擬器或物理設備。

使用內置的跨平臺資源,您可以將任何圖像,字體或翻譯文件添加到單個項目中,並且 MAUI 會自動設置本機掛鉤,以便您可以進行編碼。

最後,您將始終可以訪問本機底層操作系統 API,並且通過特定於新平臺的集成將比以往更加輕鬆。

不同平臺下,您可以添加特定操作系統的源代碼文件並訪問本機API。

有了 MAUI,一切都集中在一個地方,您可以保持生產力。

它能做到:

  • 一個針對多個平臺和設備的項目
  • 一個位置來管理字體和圖像等資源
  • 多目標組織您特定於平臺的代碼

只需要掌握一種構建客戶端應用程式的方法:MAUI,那麼所有平臺都在您的控制範圍之內。

擁有現代 App 的開發模式

.NET的願景的一部分是在開發人員的個人喜好方面為開發人員提供選擇,以便使用.NET可以提高工作效率。

這表明您在哪個IDE中使用Visual Studio 2019,Visual Studio for Mac甚至是Visual Studio Code。

MAUI將在所有這些版本中可用,並支持現有的MVVM和XAML模式以及將來的功能,例如使用C#甚至是Blazor的模型視圖更新(MVU)。

MVVM

Model-View-ViewModel(MVVM)和 XAML 是 .NET 開發人員數十年來的主要模式和實踐,它們是MAUI中的一流功能,這將繼續發展,以幫助您高效地構建和維護生產應用程式。

<StackLayout>
    <Label Text="Welcome to MAUI!" />
    <Button Text="{Binding Text}" 
            Command="{Binding ClickCommand}" />
</StackLayout>
public Command ClickCommand { get; }

public string Text { get; set; } = "Click me";

int count = 0;

void ExecuteClickCommand ()
{
    count++;
    Text = $"You clicked {count} times.";
}

MVU

此外,我們使開發人員能夠編寫流暢的C# UI並實現日益流行的“Model-View-Update”(MVU)模式。

MVU促進數據和狀態管理的單向流程,以及通過僅應用必要的更改來快速更新UI的代碼優先開發經驗。

下麵是用 MAUI 編寫的 MVU 風格的基本計數器示例。

readonly State<int> count = 0;

[Body]
View body() => new StackLayout
{
    new Label("Welcome to MAUI!"),
    new Button(
        () => $"You clicked {count} times.",
        () => count.Value ++)
    )
};

這種模式非常適合熱重載,如下麵所示,它具有從 C# 即時熱重載的能力,新增樣式,漸變和字體都不在話下。

熱重載

需要註意的是,無論是 MVVM 模式,還是 MVU 模式,都支持熱重載,運行時修改代碼保留狀態立即生效,大大提高生產力。

從 Xamarin.Forms 過渡到 .NET MAUI

Xamarin.Forms 開發人員將使用他們已經瞭解和喜愛的所有相同控制項和 API 來開始在 .NET MAUI 中使用新項目運行。

隨著我們逐步接近 MAUI 的發佈,為了幫助開發人員將現有應用平穩地過渡到 .NET MAUI,我們打算提供類似於我們今天遷移到 .NET Core 的嘗試轉換支持和遷移指南。

MAUI 時間線

我們將在今年晚些時候開始發佈 .NET MAUI 預覽版,並於 2021年11月開始面向 .NET 6 正式發佈。MAUI 將以與 Xamarin.Forms 相同的6周節奏進行發佈。

我們已經在GitHub上發佈了MAUI路線圖,並邀請您今天就加入我們!

Xamarin 和 Xamarin.Forms 的未來是什麼

作為我們.NET統一的一部分,Xamarin.iOS和Xamarin.Android將作為.NET for iOS和.NET for Android成為.NET 6的一部分。

由於這些綁定是Apple和Google發行的SDK的投影,因此此處沒有任何更改,但是將更新構建工具,目標框架別名和運行時框架別名,以匹配所有其他.NET 6工作負載。

我們致力於為.NET開發人員提供最新的移動SDK的最新信息,這是.NET MAUI的基礎,並且始終如一。

當.NET 6發行時,我們期望以其當前形式發行Xamarin SDK的最終版本,並將提供一年的服務,那時所有的現代工作都將轉移到.NET 6。

Xamarin.Forms將於今年晚些時候發佈新的主要版本,並於2021年11月通過.NET 6 GA每6周繼續發佈次要版本和服務版本。

Xamarin.Forms的最終版本將在交付後的一年內提供服務,並且所有現代作品都將轉移到.NET MAUI。

總結一下

  • 自繪組件
  • 原生 app 開發
  • 支持 MVVM 和 MVU
  • 支持代碼熱更
  • 跨平臺
  • 伴隨 .NET 6 正式發佈
  • 今年年底出預覽

歡迎關註 MAUI

MAUI GitHub 倉庫:https://github.com/dotnet/maui

內容翻譯自:https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對於要有扎實的java基礎,集合是必須掌握的,而且精讀這部分的源碼很有用,也很有必要。而LinkedList是在java.util包下,和java.io,java.lang都是比較常用,而且比較簡單。看看它們的源碼有助於鍛煉我們看源碼的感覺,也瞭解一下大神們寫代碼的風格。看這些源碼的目的,更多是為了 ...
  • 自己在寫文章的時候,也有到處去逛一逛,漸漸發現了一些有意思的事,經常會有人用同樣的評論到處刷,不知道是為了加沒什麼用的積分,還是純粹為了表達樓主好人。那麼問題來了,這種無聊的事情當然最好能夠自動化咯,自己也來試了一把,純屬娛樂。 大家在學python的時候肯定會遇到很多難題,以及對於新技術的追求,這 ...
  • 引言 好久沒有寫博客了,近期準備把 源碼啃一遍。在這之前本想直接看源碼,但是看到後面發現其實效率不高, 有些概念還是有必要回頭再細啃的,特別是其線程模型以及 的概念。 當然在開始之前還是有務必要對 要有清晰準確的認識。 傳送門 "" 事件迴圈機制(EventLoop) Netty線程模型中一個非常重 ...
  • 主要是使用了form組件 <html lang="cn"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <me ...
  • 受人所托,需要對他們的產品進行反爬測試,所以就有了以下內容,不過,我知道,針對這方面的文章太多了,是真的多,而且好早就有了,但是目前為止,很多app的防護基本也還是用的ssl pinning檢測證書。 因為,目前的app要嘛不用ssl,要嘛用就是一般的ssl,基本就是在手機上裝個相關軟體 的代理即... ...
  • 作者:超大隻烏龜 https://segmentfault.com/a/1190000022184751 總所周知 HashMap 是面試中經常問到的一個知識點,也是判斷一個候選人基礎是否扎實的標準之一,因為通過 "HashMap" 可以引出很多知識點,比如數據結構(數組、鏈表、紅黑樹)、 "equ ...
  • 看一下效果圖: InfulxDb 官方網站:https://portal.influxdata.com/downloads/ docker 安裝influxdb資料庫 chronograf可視化工具(非必要,只是可以web訪問,類似PHPMySQL) 啟動influxdb,其中 v參數表示將dock ...
  • 效果圖: 廢話 如何知道你寫的爬蟲有沒有正常運行,運行了多長時間,請求了多少個網頁,抓到了多少條數據呢?官方其實就提供了一個字典就包含一些抓取的相關信息:crawler.stats.get_stats(),crawler是scrapy中的一個組件。你可以在很多組件中訪問他,比如包含from_craw ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...