C# 标记

概述

C# 标记是一组流畅的帮助程序方法和类,用于简化在代码中生成声明性 .NET Multi-platform App UI (.NET MAUI) 用户界面的过程。 C# 标记提供的 Fluent API 在 CommunityToolkit.Maui.Markup 命名空间中可用。

与 XAML 一样,C# 标记可在 UI(视图)和业务逻辑(视图模型)之间实现完全分离。

C# 标记在 .NET MAUI 支持的所有平台上可用,并支持 .NET 热重载

NuGet 包

C# 标记包可以包含在项目中,如入门指南所述。

示例

下面是一些简短的示例,展示如何通过使用标记包来完成常见任务。

绑定

C# 标记允许我们流畅地定义绑定,从而将多个方法链接在一起,以降低代码的冗长程度:

new Entry().Bind(Entry.TextProperty, static (ViewModel vm) => vm.RegistrationCode, static (ViewModel vm, string text) => vm.RegistrationCode = text)

有关 Bind 方法的可能选项的更多详细信息,请参阅 BindableObject 扩展文档

大小调整

C# 标记允许我们流畅地定义大小,从而将多个方法链接在一起,以降低代码的冗长程度:

new Entry().Size(200, 40);

有关 Size 方法的可能选项的更多详细信息,请参阅 VisualElement 扩展文档

详细示例

此示例会创建一个 Grid 对象,其中包含子对象 LabelEntry 对象。 Label 显示文本,而 Entry 数据绑定到 viewmodel 的 RegistrationCode 属性。 每个子视图都被设置为显示在 Grid 中的特定行中,而 Entry 跨越 Grid 中的所有列。 此外,还设置了 Entry 的高度,以及它的键盘、颜色、文本的字体大小及其 Margin

C# 标记扩展还允许开发人员使用 enum 定义列和行的名称(例如 Column.Input)。

C# 标记支持使用其 Fluent API 来定义此功能:

using static CommunityToolkit.Maui.Markup.GridRowsColumns;

class SampleContentPage : ContentPage
{
    public SampleContentPage()
    {
        Content = new Grid
        {
            RowDefinitions = Rows.Define(
                (Row.TextEntry, 36)),

            ColumnDefinitions = Columns.Define(
                (Column.Description, Star),
                (Column.Input, Stars(2))),

            Children =
            {
                new Label()
                    .Text("Code:")
                    .Row(Row.TextEntry).Column(Column.Description),

                new Entry
                {
                    Keyboard = Keyboard.Numeric,
                }.Row(Row.TextEntry).Column(Column.Input)
                 .BackgroundColor(Colors.AliceBlue)
                 .FontSize(15)
                 .Placeholder("Enter number")
                 .TextColor(Colors.Black)
                 .Height(44)
                 .Margin(5, 5)
                 .Bind(Entry.TextProperty, static (ViewModel vm) => vm.RegistrationCode, static (ViewModel vm, string text) => vm.RegistrationCode = text)
            }
        };
    }

    enum Row { TextEntry }
    enum Column { Description, Input }
}

转换器

C# 标记包提供在生成应用程序 UI 时以内联方式定义 IValueConverterIMultiValueConverter 实现的功能。

转换器 说明
FuncConverter FuncConverter 提供在生成 UI 时以内联方式定义 IValueConverter 实现的功能。
FuncMultiConverter FuncMultiConverter 提供在生成 UI 时以内联方式定义 IMultiValueConverter 实现的功能。

扩展

注意

C# 标记包含用于设置特定视图属性的扩展方法。 它们旨在提高代码可读性,并且可与属性资源库结合使用。 如果属性有可用的扩展方法,建议始终使用扩展方法,也可以在进行衡量后自行选择。

扩展 说明
AbsoluteLayout AbsoluteLayout 扩展提供一系列支持在 AbsoluteLayout 中定位 View 的扩展方法。
AutomationProperties AutomationProperties 扩展提供一系列支持配置辅助功能相关设置的扩展方法。
BindableLayout BindableLayout 扩展提供一系列支持配置其 EmptyViewItemSourceItemTemplate 的扩展方法。
BindableObject BindableObject 扩展提供一系列支持在 BindableObject 上配置 Binding 的扩展方法。
DynamicResourceHandler DynamicResourceHandler 扩展提供一系列支持配置 IDynamicResourceHandler 的扩展方法,可用于为应用设置主题。
Element Element 扩展提供一系列扩展方法,这些方法支持配置 Element 的填充、效果、字体特性、动态资源、文本和文本颜色。
FlexLayout FlexLayout 扩展提供一系列支持在 FlexLayout 中定位 View 的扩展方法。
Grid 网格扩展提供一系列支持配置网格的扩展方法。
Image Image 扩展提供一系列支持配置 IImage 控件的扩展方法。
ItemsView ItemsView 扩展提供一系列支持配置 ItemsView 控件(例如 CarouselViewCollectionView)的扩展方法。
Label Label 扩展提供一系列支持配置 Label 控件的扩展方法。
Placeholder Placeholder 扩展提供一系列支持配置 IPlaceholder 控件的扩展方法。
SemanticProperties SemanticProperties 扩展提供一系列支持配置辅助功能相关设置的扩展方法。
Style Style<T> 提供一系列支持配置 Microsoft.Maui.Controls.Style 的 Fluent 扩展方法。
TextAlignment TextAlignment 扩展提供一系列扩展方法,这些方法支持在实现 ITextAlignment 的控件上配置 HorizontalTextAlignmentVeticalTextAlignment 属性。
View View 扩展提供一系列扩展方法,这些方法支持对继承自 View 的控件配置对齐方式。
VisualElement VisualElement 扩展提供一系列扩展方法,这些方法支持对 VisualElement 的大小、样式和行为进行配置。