最新.NET MAUI有什麼驚喜?

語言: CN / TW / HK

.NET 6 Preview 7 現已發佈啦,我們為 .NET 多平台應用程序 UI (MAUI) 引入了所有的新佈局。這是性能和可靠性的重大變化。我們很高興我們還增加了一些關於accessibility方面的基於新的SemanticService、字體縮放選項和對Xamarin.Forms 效果的兼容性的功能。

新的佈局

到目前為止,你在.NET MAUI中使用的佈局都是Xamarin.Forms佈局,他們知道如何調整渲染器和新的基於控件的處理程序的大小和位置。我們開始採用這種方法是為了快速將 UI 放在屏幕上,並集中精力完成我們的 UI 40 控件庫,並證明我們能夠與從 Xamarin.Forms 遷移的項目兼容。與此同時,我們一直在基於新的 LayoutManager 方法構建優化佈局,利用我們 7 年的 Xamarin.Form 佈局經驗來優化一致性、性能和可維護性。

在這個預覽中,舊的佈局現在只能在Microsoft.Maui.Controls.Compatibility命名空間中找到,而新的佈局默認是啟用的:

堆棧佈局現在包裝了兩個佈局,側重於水平和垂直方向。我們建議您選擇一個適合您的佈局需要。堆棧佈局仍然有一個您可以設置的方向屬性,在某些情況下,當你的自適應佈局根據屏幕大小或設備習慣改變方向時,這是必要的。

每個佈局都有一個相應的佈局管理器負責測量和定位視圖。Measure方法接受高度和寬度的限制,並負責測量所有佈局的子元素。然後,ArrangeChildren功能根據佈局規則設置每個視圖的大小和位置。對於有些情況,您可以覆蓋佈局的CreateLayoutManager方法,以提供ILayoutManager接口的自定義實現。

您會注意到的即時更新之一是調整了這些佈局上的默認間距值:0。如果您使用過舊版佈局,那麼您已經知道之前在那裏設置的各種不同的任意值。零設定了更明確的期望,並指引您去設置更滿足需求的值。為方便起見,請在全局樣式中設置這些起始值:

```csharp

<Style TargetType="Grid">
    <Setter Property="ColumnSpacing" Value="6"/>
    <Setter Property="RowSpacing" Value="6"/>

```

絕對佈局相對佈局現在只存在於兼容性命名空間中,我們建議您仔細考慮是否真的需要使用它們。在可能的情況下,使用上面列出的佈局之一。同時,您可以通過添加新命名空間併為 XAML 引用添加前綴來更新代碼以使用它們:

```csharp

... ``` .NET 升級助手正在針對所有這些更改進行更新,如果在升級過程中沒有為您處理,我們將盡最大努力指導您完成這些更改。

在接下來的衝刺階段,我們將重點關注改進這些新佈局,因此請查看它們並記錄您在嘗試使用它們時觀察到的任何問題

可訪問性更改和改進

我們每個月都會與來自不同公司的幾位開發人員會面,這些公司在交付能夠滿足最高可訪問性評級的應用程序方面投入了大量資金。通過這些會議,我們對可訪問性支持做了一些改變和增加,使每個人都能更容易地生產可訪問性應用程序。

TabIndex 和 IsTabStop 屬性已移除

Xamarin.Forms 中引入了 TabIndex 和 IsTabStop 屬性,以幫助開發人員控制屏幕閲讀器讀取 UI 元素的順序。在實踐中,他們最終會讓人感到困惑並且無法滿足這種需求。在 .NET MAUI 中,我們建議採用一種深思熟慮的設計方法,按照您希望的方式來排列您的UI,而不是尋找編程方式來操作您的界面結構。對於必須控制指令的情況,我們建議使用社區工具包的 SemanticOrderView,該工具在相同的 .NET MAUI 版本中也可以使用。

SetSemanticFocus 和 Announce 方法

作為新 SemanticExtensions 類的一部分,我們添加了一個新的 SetSemanticFocus 方法,允許您將屏幕閲讀器焦點移動到特定元素。將此與設置輸入焦點的 VisualElement.Focus 進行比較。

```csharp