[开发过程]上位机>关于MAUI
时间:2022-08-03 17:19:00
目录
1 框架
2 VS2022中新建的MAUI项目
2.1 程序入口
2.2 跳转到App
2.3 跳转到AppShell
2.4 跳转到MainPage
1 框架
BCL :.NET 6 基类库
Mono Runtime和WinRT:提供执行环境。
Mono : 是CLR开源实现(针对Android、iOS和 macOS), 是第三方开源项目。
https://docs.microsoft.com/en-us/dotnet/standard/clrhttps://docs.microsoft.com/en-us/dotnet/standard/clr
谈及CLR,就需了解.net实现跨平台代码的过程:
-
选择编译器。
-
编译代码Microsoft 中间语言将您的代码编译为 MSIL。
-
在CLR,即时编译器(JIT) 将 MSIL 转换为本机代码。
-
运行代码。
https://docs.microsoft.com/en-us/dotnet/standard/managed-execution-processhttps://docs.microsoft.com/en-us/dotnet/standard/managed-execution-process
“托管代码(managed code)非托管代码("unmanaged code")”的对比:
托管代码:托管代码执行runtime”管理。.NET中的“runtime”称为CLR,CLR与实现无关(例如Mono、.NET Framework 或 .NET Core/.NET 5 )。CLR 负责获取托管代码,编译成机器代码,然后执行。runtime提供自动内存管理、安全边界、类型安全等重要服务。
非托管代码(如:C/C 程序):非托管代码几乎负责一切,本质上是加载到内存并启动的二进制文件。非托管代码开发者需要考虑从内存管理到安全。
What is managed code? | Microsoft DocsLearn how managed code is code whose execution is managed by a runtime, the Common Language Runtime (CLR).https://docs.microsoft.com/en-us/dotnet/standard/managed-code
2 VS2022中新建的MAUI项目
2.1 程序入口
VS2022中新建了MAUI项目后,程序入口如下:
其中代码如下:
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
return builder.Build();
}
}
代码.UseMauiApp
2.2 跳转到App
再看App,包含两个文件,
.xaml后缀的是界面UI相关内容,
.cs后缀的是该UI相关的逻辑。
App.xaml代码如下:
主要看:
是颜色和默认样式的定义。
而App.xaml.cs中,主要是进行了页面的跳转,跳转到AppShell,代码如下:
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new AppShell();
}
}
2.3 跳转到AppShell
再看AppShell,同样包含两个文件,但主要看AppShell.xaml。
AppShell.xaml代码如下,主要用了一个模板,路由到MainPage。
2.4 跳转到MainPage
接下来就要看 MainPage,同样是包括两个文件:
MainPage.xaml代码如下,是运行后看到的那个界面的UI代码:
而MainPage.xaml.cs的代码如下,主要是看其中的点击事件,即OnCounterClicked函数。
里面的CounterBtn与UI界面文件(MainPage.xaml)中的按钮对应。
即:
namespace OneDream;
public partial class MainPage : ContentPage
{
int count = 0;
public MainPage()
{
InitializeComponent();
}
private void OnCounterClicked(object sender, EventArgs e)
{
count++;
if (count == 1)
CounterBtn.Text = $"Clicked {count} time";
else
CounterBtn.Text = $"Clicked {count} times";
SemanticScreenReader.Announce(CounterBtn.Text);
}
}
后记:
持续更新中。