22

Maui、Photino、WinForm 示例

简介

本文档旨在讲解跨平台客户端(Maui、Photino、WinForm)的集成方式、启动流程及与主框架的对接。重点说明平台适配、界面开发、配置管理等关键点。通过分析代码结构和功能,帮助开发者理解如何在不同平台上实现跨平台功能。

项目结构

项目主要分为三个示例模块:

  1. Maui:基于 .NET MAUI 的跨平台应用。
  2. Photino:基于 Photino.NET 的轻量级跨平台应用。
  3. WinForm:基于 Windows Forms 的传统桌面应用。

每个模块包含以下关键文件:

  • Program.csMauiProgram.cs:应用的入口点。
  • App.xamlApp.razor:定义应用的全局资源和布局。
  • MainForm.cs(仅 WinForm):主窗口的实现。

核心组件

以下是每个平台的核心组件及其功能:

1. Maui

  • MauiProgram.cs:配置和启动 MAUI 应用。
    • 使用 MauiApp.CreateBuilder() 创建应用构建器。
    • 配置字体和 Blazor WebView。
    • 注册服务和调试工具。
  • App.xaml:定义应用的全局资源。

2. Photino

  • Program.cs:启动 Photino 应用。
    • 使用 PhotinoBlazorAppBuilder 构建应用。
    • 配置窗口属性(标题、图标、最大化)。
    • 隐藏控制台窗口并处理未捕获异常。
  • App.razor:定义路由和布局。

3. WinForm

  • Program.cs:启动 WinForm 应用。
    • 配置全局异常处理。
    • 初始化应用并运行主窗口。
  • MainForm.cs:主窗口实现。
    • 使用 BlazorWebView 嵌入 Blazor 组件。
    • 配置服务和事件处理。

架构概述

跨平台适配

  • Maui:通过 MauiAppBuilder 实现跨平台适配,支持 iOS、Android、Windows 和 macOS。
  • Photino:基于 Chromium 的轻量级框架,适用于桌面平台。
  • WinForm:传统 Windows 桌面应用,通过 BlazorWebView 集成 Blazor。

启动流程

  1. 初始化:加载配置和资源。
  2. 服务注册:注册依赖的服务(如 Blazor 相关服务)。
  3. 窗口配置:设置窗口属性(标题、图标、大小等)。
  4. 运行:启动应用主循环。

详细组件分析

1. MauiProgram.cs

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder.UseMauiApp<App>()
           .ConfigureFonts(fonts =>
           {
               fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
           });
    builder.Services.AddApplication();
    builder.Services.AddMauiBlazorWebView();
#if DEBUG
    builder.Services.AddBlazorWebViewDeveloperTools();
    builder.Logging.AddDebug();
#endif
    return builder.Build();
}
  • 功能:配置 MAUI 应用并启动。
  • 关键点
    • 使用 AddMauiBlazorWebView 集成 Blazor。
    • 调试模式下启用开发者工具。

2. Program.cs (Photino)

var builder = PhotinoBlazorAppBuilder.CreateDefault(args);
builder.Services.AddApplication();
builder.RootComponents.Add<App>("app");
var app = builder.Build();
app.MainWindow.SetIconFile("favicon.ico")
              .SetTitle("Known信息管理系统")
              .Center()
              .SetMaximized(true);
app.Run();
  • 功能:启动 Photino 应用并配置窗口。
  • 关键点
    • 使用 PhotinoBlazorAppBuilder 构建应用。
    • 窗口最大化并隐藏控制台。

3. MainForm.cs (WinForm)

public MainForm()
{
    blazorWebView = new BlazorWebView();
    blazorWebView.Dock = DockStyle.Fill;
    Controls.Add(blazorWebView);
    AddBlazorWebView();
}
  • 功能:主窗口初始化并嵌入 Blazor。
  • 关键点
    • 使用 BlazorWebView 加载 Blazor 组件。
    • 配置服务提供者和路由。

依赖分析

  • Maui:依赖 Microsoft.MauiMicrosoft.AspNetCore.Components.WebView.Maui
  • Photino:依赖 Photino.Blazor
  • WinForm:依赖 Microsoft.AspNetCore.Components.WebView.WindowsForms

性能考虑

  • Maui:跨平台性能优化依赖于 MAUI 框架。
  • Photino:轻量级,启动快,适合简单应用。
  • WinForm:传统 Windows 应用,性能稳定。

常见问题

  1. Blazor 加载失败:检查 wwwroot/index.html 是否存在。
  2. 窗口无法最大化:确保调用 SetMaximized(true)
  3. 服务未注册:确认 AddApplication() 已调用。

结论

通过分析三个平台的实现代码,可以看出跨平台客户端开发的核心在于适配不同平台的启动流程和界面渲染方式。Maui 提供了完整的跨平台支持,Photino 适合轻量级需求,而 WinForm 则保留了传统 Windows 应用的优势。