.NET MAUI候選版本,能帶給你什麼小驚喜?

微軟技術棧發表於2022-04-22

好訊息!.NET MAUI釋出了候選版本。SDK現在已經整合了API,可以更新庫,併為正式釋出(GA)相容性做好了準備。和其他的.NET候選版本一樣,這個版本包含了一個“go live”的支援政策,這意味著.NET MAUI在你的產品應用中會得到微軟的支援。


獲取.NET MAUI RC1,安裝或更新Visual Studio 2022預覽版17.2到預覽版3。在安裝程式中,確認已在“使用 .NET 工作負載的移動開發”下選中 .NET MAUI(預覽版)。

要在Mac上使用.NET MAUI RC1,請遵循wiki上的命令列說明。在Visual Studio 2022的Mac版本中,對.NET MAUI的支援將在未來的預覽版中正式釋出。

在GitHub上有關於這個RC版本的釋出說明。關於開始使用.NET MAUI的更多資訊,請參考我們的文件,以及在升級專案時要採用的一系列更改的遷移技巧表

.NET播客應用中開始你的旅程吧(見上圖),它可以在Android, iOS, macOS和Windows上執行,並展示了原生應用的UI和Blazor Hybrid

Xamarin支援多久時間呢? Xamarin支援政策在這些產品首次釋出後的2年內仍然有效。最後一次釋出是在2021年11月,因此支援將持續到2023年11月。

.NET MAUI候選版本中有什麼?

作為一個多平臺的應用程式構建框架,.NET MAUI利用了Android、iOS、macOS和Windows的平臺sdk。這些基本塊都包含在這個版本中,除了使用. .NET MAUI最大化程式碼共享和效率外,你還可以直接使用c#。

.NET MAUI提供了40多個佈局和控制元件,為構建跨平臺和移動平臺的自適應UI進行了優化。你也可以整合Blazor元件或整個Blazor應用程式,在桌面和移動裝置上釋出相同的體驗,就像你今天在網路上釋出的體驗一樣。

它與Xamarin.Forms相比如何?你可以得到Xamarin.Forms附帶的所有UI控制元件,加上新的控制元件,如 BlazorWebView, Border, GraphicsView, MenuBar, Shadow, and Window.

除了相關的主題,還有這些都記錄在案,如:

  • 動畫
  • 筆刷用於實色和漸變顏色
  • 顯示彈出視窗
  • 圖形,充分利用Microsoft.Maui圖形混合模式,顏色,畫布繪圖,影像,轉換,纏繞模式,等等
  • 陰影
  • 使用XAML和CSS樣式
  • 明暗模式的主題
  • 視覺狀態

新的.NET MAUI專案模板現在在“Resourcesstyles.xaml”中包含了一個預設的樣式表為所有控制元件提供調色盤和樣式。以Entry為例,當啟動一個新的應用程式時,這些文字輸入現在將以一個共享的主題開始,同時仍然對其執行的平臺是有效的。

<Style TargetType="Entry">
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
<Setter Property="FontFamily" Value="OpenSansRegular"/>
<Setter Property="FontSize" Value="14" />
<Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource LightGray}, Dark={StaticResource DarkGray}}" />
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<VisualState.Setters>
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource LightGray}, Dark={StaticResource DarkGray}}" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>

對於支援不同狀態的檢視,我們建立了一個合理的預設值,並提供了明暗模式顏色選項。欲瞭解更多資訊,請檢視:

  • 風格
  • 主題
  • 視覺狀態

動畫:https://docs.microsoft.com/zh...

筆刷:https://docs.microsoft.com/zh...

顯示彈出視窗:https://docs.microsoft.com/zh...

圖形:https://docs.microsoft.com/zh...

陰影:https://docs.microsoft.com/zh...

XAML:https://docs.microsoft.com/zh...

CSS樣式:https://docs.microsoft.com/zh...

主題:https://docs.microsoft.com/zh...

視覺狀態:https://docs.microsoft.com/zh...

風格:https://docs.microsoft.com/zh...

主題:https://docs.microsoft.com/zh...

視覺狀態:https://docs.microsoft.com/zh...

自定義控制元件

.NET MAUI 改進 Xamarin.Forms 體系結構的其中一件事是新增低程式碼掛鉤來修改幾乎所有內容。讓我們考慮一個典型的例子,刪除Entry欄位上獨特的Android下劃線。當沒有多平臺風格的“下劃線”,它只存在於Android時,你可能會去做這個?

#if ANDROID
Microsoft.Maui.Handlers.EntryHandler.Mapper.ModifyMapping("NoUnderline", (h, v) =>
{
    h.PlatformView.BackgroundTintList = ColorStateList.ValueOf(Colors.Transparent.ToPlatform());
});
#endif

這就是所有的程式碼。這段程式碼只需要在呼叫處理程式之前執行在應用程式的開始部分。

讓我們來解釋一下這是怎麼回事。首先,#if ANDROID是一個條件編譯指令,表明這段程式碼只能在安卓上執行。在其他情況下,當您為所有平臺修改控制元件時,這是不必要的。

接下來,我們需要訪問控制元件。你使用的Entry是一個.NET MAUI控制元件。Entry的每個屬性、命令、事件等都通過“處理程式handler”“對映mapped”到平臺實現。要修改對映,你可以通過處理程式的對映(Microsoft.Maui.Handlers.EntryHandler.Mapper)進入它。從mapper中我們有3種方法:

  • PrependToMapping在.NET MAUI程式碼之前執行
  • modifmapping執行,而不是.NET MAUI程式碼
  • AppendToMapping執行在.NET MAUI程式碼之後

對於這種情況,我們使用哪個並不重要,因為它至少會被呼叫一次,並且Entry上的其他實現不會觸及我們需要修改的本機屬性。這裡程式碼使用了modifmapping並新增了一個名為“NoUnderline”的Entry。通常,該屬性與實際屬性的名稱相匹配,但在本例中,我們將引入一個新的屬性。
在action裡的h是handler它讓我們訪問PlatformView裡是安卓型別的TextView。在這一點上,程式碼是直接與安卓SDK工作。

現在去掉了下劃線,你可以實現自己的設計,比如說,一個像老式Windows Phone那樣的邊框。

<Border Stroke="{StaticResource Black}"
StrokeThickness="2"
StrokeShape="Rectangle">
<Entry
Margin="20,4"
Placeholder="Username" />
</Border>

有關如何輕鬆修改跨平臺以及平臺特定層控制元件的外觀和感覺的更多示例,請參閱自定義控制元件的文件

我們需要你的反饋

按照我們的簡單指南安裝Visual Studio 2022的最新預覽版(17.2預覽版3),並構建您的第一個多平臺應用程式。

當您遇到任何問題時,請在GitHub上的dotnet/maui上或者Microsoft Q&A 上提問。

瞭解更多.NET MAUI


掃碼關注微軟中國MSDN,獲取更多前沿技術資訊和學習內容!

相關文章