增加MessageBoxService服务

This commit is contained in:
chfei committed 2026-11-13 10:16:43 +08:00
1 parent 3dcb6a1c34
commit 30a6a5ea24
15 files changed
+517 -153

No files matched your search

@@ -0,0 +1,27 @@
using MAX.Core.Commons;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Store.Management.Framework
{
public interface IMessageBoxService
{
MessageResult Show(string messageBoxText, string caption, MessageButton button, MessageIcon icon, MessageResult defaultResult);
void ShowInformation(string content);
void ShowWarning(string content);
void ShowError(string content);
void ShowError(string content, Exception exception);
bool ShowYesNoQuestion(string content);
bool ShowYesNoWarning(string content);
bool ShowYesNoError(string content);
bool ShowOkCancelQuestion(string content);
bool ShowOkCancelWarning(string content);
bool ShowOkCancelError(string content);
MessageResult ShowYesNoCancelQuestion(string content);
MessageResult ShowYesNoCancelWarning(string content);
MessageResult ShowYesNoCancelError(string content);
}
}
@@ -0,0 +1,99 @@
using System.ComponentModel;
using System.Windows;
namespace Store.Management.Framework
{
public static class MessageBoxEnumsConverter
{
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public static bool? ToBool(this MessageBoxResult result)
{
switch (result)
{
case MessageBoxResult.Cancel: return null;
case MessageBoxResult.No: return false;
default: return true;
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public static bool? ToBool(this MessageResult result)
{
switch (result)
{
case MessageResult.Cancel: return null;
case MessageResult.No: return false;
default: return true;
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public static MessageBoxResult ToMessageBoxResult(this MessageResult result)
{
switch (result)
{
case MessageResult.Cancel: return MessageBoxResult.Cancel;
case MessageResult.No: return MessageBoxResult.No;
case MessageResult.Yes: return MessageBoxResult.Yes;
case MessageResult.OK: return MessageBoxResult.OK;
default: return MessageBoxResult.None;
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public static MessageResult ToMessageResult(this MessageBoxResult result)
{
switch (result)
{
case MessageBoxResult.Cancel: return MessageResult.Cancel;
case MessageBoxResult.No: return MessageResult.No;
case MessageBoxResult.Yes: return MessageResult.Yes;
case MessageBoxResult.OK: return MessageResult.OK;
default: return MessageResult.None;
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public static MessageBoxButton ToMessageBoxButton(this MessageButton button)
{
switch (button)
{
case MessageButton.OKCancel: return MessageBoxButton.OKCancel;
case MessageButton.YesNo: return MessageBoxButton.YesNo;
case MessageButton.YesNoCancel: return MessageBoxButton.YesNoCancel;
default: return MessageBoxButton.OK;
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public static MessageButton ToMessageButton(this MessageBoxButton button)
{
switch (button)
{
case MessageBoxButton.OKCancel: return MessageButton.OKCancel;
case MessageBoxButton.YesNo: return MessageButton.YesNo;
case MessageBoxButton.YesNoCancel: return MessageButton.YesNoCancel;
default: return MessageButton.OK;
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public static MessageBoxImage ToMessageBoxImage(this MessageIcon icon)
{
switch (icon)
{
case MessageIcon.Error: return MessageBoxImage.Error;
case MessageIcon.Information: return MessageBoxImage.Information;
case MessageIcon.Question: return MessageBoxImage.Question;
case MessageIcon.Warning: return MessageBoxImage.Warning;
default: return MessageBoxImage.None;
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public static MessageIcon ToMessageIcon(this MessageBoxImage icon)
{
switch (icon)
{
case MessageBoxImage.Error: return MessageIcon.Error;
case MessageBoxImage.Information: return MessageIcon.Information;
case MessageBoxImage.Question: return MessageIcon.Question;
case MessageBoxImage.Warning: return MessageIcon.Warning;
default: return MessageIcon.None;
}
}
}
}
@@ -0,0 +1,124 @@
using MAX.Core.DependencyInjection;
using Store.Management.Framework.Configs;
using System.Windows;
using MessageBox = HandyControl.Controls.MessageBox;
namespace Store.Management.Framework
{
public class MessageBoxService : IMessageBoxService, ISingletonDependency
{
protected readonly Guid id = Guid.NewGuid();
public string MessageTitle { get; set; } = string.Empty;
public MessageBoxService()
{
MessageTitle = AppConfig.AppDisplayName;
}
public virtual MessageResult Show(string messageBoxText, string caption, MessageButton button, MessageIcon icon, MessageResult defaultResult)
{
Window? window = Application.Current?.Windows.OfType<Window>().FirstOrDefault(w => w.IsActive);
if (window is null)
{
return MessageBox.Show(
messageBoxText: messageBoxText,
caption: caption,
button: button.ToMessageBoxButton(),
icon: icon.ToMessageBoxImage(),
defaultResult: defaultResult.ToMessageBoxResult()
).ToMessageResult();
}
else
{
return MessageBox.Show(
owner: window,
messageBoxText: messageBoxText,
caption: caption,
button: button.ToMessageBoxButton(),
icon: icon.ToMessageBoxImage(),
defaultResult: defaultResult.ToMessageBoxResult()
).ToMessageResult();
}
}
public void ShowInformation(string content)
{
this.ShowMessage(content, MessageTitle, MessageButton.OK, MessageIcon.Information, MessageResult.OK);
}
public void ShowWarning(string content)
{
this.ShowMessage(content, MessageTitle, MessageButton.OK, MessageIcon.Warning, MessageResult.OK);
}
public void ShowError(string content, Exception exception)
{
if (exception is null)
{
ShowError(content);
}
else
{
this.ShowMessage(content + "\n" + exception.Message, MessageTitle, MessageButton.OK, MessageIcon.Error, MessageResult.OK);
}
}
public void ShowError(string content)
{
this.ShowMessage(content, MessageTitle, MessageButton.OK, MessageIcon.Error, MessageResult.OK);
}
public bool ShowYesNoQuestion(string content)
{
MessageResult result = this.ShowMessage(content, MessageTitle, MessageButton.YesNo, MessageIcon.Question, MessageResult.No);
return result == MessageResult.Yes;
}
public bool ShowYesNoWarning(string content)
{
MessageResult result = this.ShowMessage(content, MessageTitle, MessageButton.YesNo, MessageIcon.Warning, MessageResult.No);
return result == MessageResult.Yes;
}
public bool ShowYesNoError(string content)
{
MessageResult result = this.ShowMessage(content, MessageTitle, MessageButton.YesNo, MessageIcon.Error, MessageResult.No);
return result == MessageResult.Yes;
}
public bool ShowOkCancelQuestion(string content)
{
MessageResult result = this.ShowMessage(content, MessageTitle, MessageButton.OKCancel, MessageIcon.Question, MessageResult.OK);
return result == MessageResult.OK;
}
public bool ShowOkCancelWarning(string content)
{
MessageResult result = this.ShowMessage(content, MessageTitle, MessageButton.OKCancel, MessageIcon.Warning, MessageResult.OK);
return result == MessageResult.OK;
}
public bool ShowOkCancelError(string content)
{
MessageResult result = this.ShowMessage(content, MessageTitle, MessageButton.OKCancel, MessageIcon.Error, MessageResult.OK);
return result == MessageResult.OK;
}
public MessageResult ShowYesNoCancelQuestion(string content)
{
return this.ShowMessage(content, MessageTitle, MessageButton.YesNoCancel, MessageIcon.Question, MessageResult.Cancel);
}
public MessageResult ShowYesNoCancelWarning(string content)
{
return this.ShowMessage(content, MessageTitle, MessageButton.YesNoCancel, MessageIcon.Warning, MessageResult.Cancel);
}
public MessageResult ShowYesNoCancelError(string content)
{
return this.ShowMessage(content, MessageTitle, MessageButton.YesNoCancel, MessageIcon.Error, MessageResult.Cancel);
}
}
}
@@ -0,0 +1,37 @@
namespace Store.Management.Framework
{
public static class MessageBoxServiceExtensions
{
extension(IMessageBoxService service)
{
public MessageResult ShowMessage(string messageBoxText, string caption, MessageButton button, MessageIcon icon, MessageResult defaultResult)
{
VerifyService(service);
return service.Show(messageBoxText, caption, button, icon, defaultResult);
}
public bool? ShowMessage(string messageBoxText)
{
return service.ShowMessage(messageBoxText, string.Empty);
}
public bool? ShowMessage(string messageBoxText, string caption)
{
return service.ShowMessage(messageBoxText, caption, MessageButton.OK).ToBool();
}
public MessageResult ShowMessage(string messageBoxText, string caption, MessageButton button)
{
return service.ShowMessage(messageBoxText, caption, button, MessageIcon.None);
}
public MessageResult ShowMessage(string messageBoxText, string caption, MessageButton button, MessageIcon icon)
{
VerifyService(service);
return service.Show(messageBoxText, caption, button, icon, MessageResult.None);
}
}
static void VerifyService(IMessageBoxService service)
{
if (service == null)
throw new ArgumentNullException(nameof(service));
}
}
}
@@ -0,0 +1,7 @@
namespace Store.Management.Framework
{
public enum MessageButton
{
OK, OKCancel, YesNoCancel, YesNo,
}
}
@@ -0,0 +1,8 @@
namespace Store.Management.Framework
{
public enum MessageIcon
{
None, Error, Question, Warning, Information,
Hand = Error, Stop = Error, Exclamation = Warning, Asterisk = Information
}
}
@@ -0,0 +1,7 @@
namespace Store.Management.Framework
{
public enum MessageResult
{
None, OK, Cancel, Yes, No,
}
}