maui中的加载动画

loading animation in maui

  <!-- Loading Indicator -->
  <ActivityIndicator IsVisible="{Binding IsBusy}" 
                     IsRunning="{Binding IsBusy}"
                     Color="{StaticResource Primary}" />
<StackLayout 
    IsVisible="{Binding IsBusy}"
    VerticalOptions="CenterAndExpand"
    HorizontalOptions="CenterAndExpand"
    Spacing="15"> 
    <ActivityIndicator 
        IsRunning="True"
        Color="{StaticResource Primary}"
        WidthRequest="50"
        HeightRequest="50"
        Scale="1.2"/> 
    <Label 
    Text="正在加载,请稍候..."
    FontSize="16"
    TextColor="Gray"
    HorizontalOptions="Center"/>
</StackLayout>
<StackLayout 
    IsVisible="{Binding IsLoading}"
    VerticalOptions="CenterAndExpand"
    HorizontalOptions="CenterAndExpand"
    Spacing="15"> 
    <ActivityIndicator 
        IsRunning="True"
        Color="{StaticResource Primary}"
        WidthRequest="50"
        HeightRequest="50"
        Scale="1.2"/> 
    <Label 
    Text="正在加载,请稍候..."
    FontSize="16"
    TextColor="Gray"
    HorizontalOptions="Center"/>
</StackLayout>

maui中定义全局变量

maui中获取封装全局变量

能不能直接定义 public static MauiApp CreateMauiApp()

MauiProgram 里的 CreateMauiApp() 本来就是 静态方法,你完全可以在里面直接定义和读取配置,不需要额外类。

private string HubUrl = " "; // 根据实际情况调整 读取launchSettings.json

HttpClient 的 BaseAddress 全局可用(依赖注入直接拿 HttpClient)。 HubUrl 用 builder.Configuration["HubUrl"] 存储,任何地方都能读。 怎么读

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();

        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
            });

        // 配置 HttpClient,全局注册
        builder.Services.AddSingleton(new HttpClient
        {
            BaseAddress = new Uri("http://221.236.27.82:10020/api/")
        });

        // HubUrl 也可以放配置里
        builder.Configuration["HubUrl"] = "http://221.236.27.82:10020/hubs/reminder";

        return builder.Build();
    }
}

HttpClientBaseAddress 全局可用(依赖注入直接拿 HttpClient)。

HubUrlbuilder.Configuration["HubUrl"] 存储,任何地方都能读。

1. 读取 HttpClient 的 BaseAddress

因为 HttpClient 注册到了 DI(依赖注入)容器里,所以在 任何需要的类(ViewModel / Service / Page)里,构造函数直接注入就行:

public class ReminderService
{
    private readonly HttpClient _httpClient;

    public ReminderService(HttpClient httpClient)
    {
        _httpClient = httpClient;
    }

    public async Task<string> GetDataAsync()
    {
        var result = await _httpClient.GetStringAsync("reminders");
        return result;
    }
}

然后在 MauiProgram.cs 注册:builder.Services.AddSingleton();使用时直接拿:

var service = ServiceHelper.GetService(); var data = await service.GetDataAsync();

🔹 2. 读取 HubUrl(来自 builder.Configuration

builder.Configuration 会被存放到 MauiApp 的 ServiceProvider 里,所以你也可以注入 IConfiguration 来读:

public class HubConnectionService
{
    private readonly string _hubUrl;

    public HubConnectionService(IConfiguration config)
    {
        _hubUrl = config["HubUrl"];
    }

    public string GetHubUrl() => _hubUrl;
}

注册:

builder.Services.AddSingleton<HubConnectionService>();

使用:

var hubService = ServiceHelper.GetService<HubConnectionService>();
var hubUrl = hubService.GetHubUrl();

🔹 3. 如果你想在 页面或 ViewModel 里直接读

可以这样写:

using Microsoft.Maui.Controls;

var config = IPlatformApplication.Current.Services.GetService<IConfiguration>();
var hubUrl = config["HubUrl"];