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);
}
用着不够方便,所以呵呵。
一、准备工作
- 上一次回头要折腾的本地化资源的事情折腾了一下,在Demo项目添加了一个页面Pages\PResource。用这个页面添加了几个中英文字符串。
- 为了这个页面,在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);
else
await 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));
else
await 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);
else
return await MainThread.InvokeOnMainThreadAsync(() => _PMMessage.ShowConfirmAsync(message.ToString(), delaySeconds));
}
finally
{
_Semaphore.Release();
}
}
}
三、效果




四、后续
- 键盘侦听
- 右上角画个×
浙公网安备 33010602011771号