如何使用 c# 而不是 xaml 创建 .Net Maui ContentPage?

How create .Net Maui ContentPage using c# instead of xaml?

.Net Maui ContentPage 文档给出了一个 XAML 示例。但是没有c#例子。

如何仅使用 c# 创建 ContentPage?

tl;dr

  • 概念是“c# 标记”。
  • 入门:右键单击项目-> 添加-> 新项-> .NET MAUI-> .NET MAUI ContentPage (C#).NET MAUI ContentView (C#).
  • 如果 Maui 文档(还)没有您需要的信息,google xamarin forms SomeUIElement class SomeUIElement API。

Maui“API”文档还没有(目前只有一个页面给出每个class的“higher-level”解释),所以可以找到更多信息通过搜索 对应的 Xamarin Forms class.
Google xamarin forms contentpage class 查找:

Xamarin.Forms / ContentPage Class.

在那里,我们看到了 c# 示例:

using System;
using Xamarin.Forms;

namespace ContentPageExample
{
    public class App : Application
    {
        public static Page GetMainPage ()
        {    
            return new ContentPage { 
                Content = new Label {
                    Text = "Hello, Forms!",
                    VerticalOptions = LayoutOptions.CenterAndExpand,
                    HorizontalOptions = LayoutOptions.CenterAndExpand,
                },
            };
        }

        public App ()
        {
            MainPage = GetMainPage();
        }
    }
}

毛伊岛的 App 细节可能略有不同;我们关心的这段代码部分是:

            return new ContentPage { 
                Content = new Label {
                    Text = "Hello, Forms!",
                    VerticalOptions = LayoutOptions.CenterAndExpand,
                    HorizontalOptions = LayoutOptions.CenterAndExpand,
                },
            };

这在毛伊岛有效 as-is。 (编译器警告 LayoutOptions.CenterAndExpand 已弃用;但讨论这超出了本答案的范围。)


可重用视图

如果您想从 xaml 或代码中的其他地方引用 UI 元素,请定义现有 UI 元素的子 class。

感谢 Paramjit 指出第一步是将适当的项目添加到项目中。对于ContentPage,即:

Right click on project-> Add -> New Item -> .NET MAUI-> .NET MAUI ContentPage (C#)

对于ContentView(如下),那一步是:

Right click on project-> Add -> New Item -> .NET MAUI-> .NET MAUI ContentView (C#)


源文件MyContentView.cs:

namespace MyViews
{
    public class MyContentView : ContentView
    {
        public MyContentView {
            //NO "InitializeComponent()" because doing it all in c#.

            Content = new Label {
                Text = "Hello, Maui!"
            }
        }
    }
}

在XAML中的用法:

<SomeClass ...
    xmlns:myviews="clr-namespace:MyViews"
    ...>
    ...
    <myviews:MyContentView ... />
</SomeClass>

作为 c# 标记的一部分在 c# 中的用法:

using MyViews;

    ...
    var page = new ContentPage {
        Content = new MyContentView()
    }

高级

Subclassing ContentView 是在毛伊岛制作“自定义控件”的一种方法。

  • 要定义自定义属性,请阅读“自定义视图”和“BindableProperties”。 (暂时没有具体链接可以推荐,如有链接欢迎评论补充。)

  • 更高级的方法是创建自定义处理程序。
    参见 Creating a .NET MAUI Maps Control


更多信息

在 c# 中定义 UI 个元素称为“c# 标记”。

参见 Introducing C# Markup for Xamarin.Forms

Xamarin Community Toolkit C# Markup。注意: 中提到的 Nuget 不再需要