Maui的Page 提供了一个DisplayAlertAsync的方法

    public Task DisplayAlertAsync(string title, string message, string cancel){return DisplayAlertAsync(title, message, null, cancel, FlowDirection.MatchParent);}public Task<bool> DisplayAlertAsync(string title, string message, string accept, string cancel){return DisplayAlertAsync(title, message, accept, cancel, FlowDirection.MatchParent);}public Task DisplayAlertAsync(string title, string message, string cancel, FlowDirection flowDirection){return DisplayAlertAsync(title, message, null, cancel, flowDirection);}

用着不够方便,所以呵呵。

一、准备工作

  1. 上一次回头要折腾的本地化资源的事情折腾了一下,在Demo项目添加了一个页面Pages\PResource。用这个页面添加了几个中英文字符串。
  2. 为了这个页面,在LunZi项目写了一个JsonExtensions和PreferenceExtensions的静态类,也算两个小轮子吧。

By the way,LunZi保存在Gitee了。

二、MessageBox(简写MB)

public static class MB
{static SemaphoreSlim _Semaphore = new(1, 1);static PMMessage _PMMessage = new();public static async Task ShowAsync(string message, int delaySeconds = 15){try{await _Semaphore.WaitAsync();if (MainThread.IsMainThread)await _PMMessage.ShowMessageAsync(message, delaySeconds);elseawait MainThread.InvokeOnMainThreadAsync(async () => await _PMMessage.ShowMessageAsync(message, delaySeconds));}finally{_Semaphore.Release();}}public static async Task ExceptionAsync(Exception e){try{await _Semaphore.WaitAsync();if (MainThread.IsMainThread)await _PMMessage.ErrorAsync(e.GetFriendMessage(), VMTrace.CreateList(e.StackTrace));elseawait MainThread.InvokeOnMainThreadAsync(async () => await _PMMessage.ErrorAsync(e.GetFriendMessage(), VMTrace.CreateList(e.StackTrace)));}finally{_Semaphore.Release();}}public static async Task ExceptionAsync(string message, string? traceJson){try{await _Semaphore.WaitAsync();await _PMMessage.ErrorAsync(message, traceJson?.ToObjectList<VMTrace>());}finally{_Semaphore.Release();}}public static async Task<bool> ConfirmAsync(object message, int delaySeconds = 15){try{await _Semaphore.WaitAsync();if (MainThread.IsMainThread)return await _PMMessage.ShowConfirmAsync(message.ToString(), delaySeconds);elsereturn await MainThread.InvokeOnMainThreadAsync(() => _PMMessage.ShowConfirmAsync(message.ToString(), delaySeconds));}finally{_Semaphore.Release();}}
}

三、效果
image
image
image
image

四、后续

  1. 键盘侦听
  2. 右上角画个×