| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- using System;
- using System.Windows;
- namespace TeamAAS.Dialogs.Dialogs
- {
- /// <summary>统一的消息、警告、异常和确认对话框。</summary>
- public partial class MessageDialog
- {
- public bool Result { get; private set; }
- /// <summary>三键对话框结果:true=是 / false=否 / null=取消(仅 SetupAskYesNoCancel 使用)</summary>
- public bool? YesNoCancelResult { get; private set; }
- private const string InfoIcon = "M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,17A1,1 0 0,1 11,16V11A1,1 0 0,1 12,10A1,1 0 0,1 13,11V16A1,1 0 0,1 12,17M12,7.5A1,1 0 0,1 11,6.5A1,1 0 0,1 12,5.5A1,1 0 0,1 13,6.5A1,1 0 0,1 12,7.5Z";
- private const string WarningIcon = "M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16";
- private const string ErrorIcon = "M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z";
- private const string QuestionIcon = InfoIcon;
- private const string ColorInfo = "#2196F3";
- private const string ColorWarning = "#FF9800";
- private const string ColorError = "#F44336";
- private const string ColorQuestion = "#2196F3";
- public MessageDialog()
- {
- InitializeComponent();
- UiScaler.Attach(this); // 分辨率/DPI 自适应
- }
- public void SetupInfo(string message, string title = "提示")
- {
- Configure(message, title, InfoIcon, ColorInfo, "确定", null, null);
- }
- public void SetupWarning(string message, string title = "警告")
- {
- Configure(message, title, WarningIcon, ColorWarning, "确定", null, null);
- }
- public void SetupError(string message, string title = "错误", string details = null)
- {
- Configure(message, title, ErrorIcon, ColorError, "确定", null, details);
- }
- /// <summary>显示带可展开诊断详情的异常对话框。</summary>
- public void SetupException(string message, Exception exception, string title = "错误")
- {
- var summary = exception == null ? message : string.Concat(message, ": ", exception.Message);
- SetupError(summary, title, exception?.ToString());
- }
- public void SetupConfirm(string message, string title = "确认", string okText = "确定", string cancelText = "取消")
- {
- Configure(message, title, QuestionIcon, ColorQuestion, okText, cancelText, null);
- }
- public void SetupAskYesNo(string message, string title = "请确认", string yesText = "是", string noText = "否")
- {
- SetupConfirm(message, title, yesText, noText);
- }
- /// <summary>是/否/取消三键确认。</summary>
- public void SetupAskYesNoCancel(string message, string title = "请确认")
- {
- YesNoCancelResult = null;
- Configure(message, title, QuestionIcon, ColorQuestion, "是", "取消", null);
- BtnNo.Visibility = Visibility.Visible;
- }
- private void Configure(string message, string title, string icon, string color, string okText, string cancelText, string details)
- {
- Result = false;
- YesNoCancelResult = null;
- Title = title;
- MessageText.Text = message ?? string.Empty;
- IconDisplay.Data = System.Windows.Media.Geometry.Parse(icon);
- IconDisplay.Fill = new System.Windows.Media.SolidColorBrush(
- (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString(color));
- BtnOK.Content = okText;
- BtnOK.Visibility = Visibility.Visible;
- BtnNo.Visibility = Visibility.Collapsed;
- BtnCancel.Content = cancelText;
- BtnCancel.Visibility = string.IsNullOrEmpty(cancelText) ? Visibility.Collapsed : Visibility.Visible;
- DetailsText.Text = details ?? string.Empty;
- DetailsExpander.Visibility = string.IsNullOrWhiteSpace(details) ? Visibility.Collapsed : Visibility.Visible;
- DetailsExpander.IsExpanded = false;
- BtnCopyDetails.Content = "复制诊断信息";
- }
- private void BtnCopyDetails_Click(object sender, RoutedEventArgs e)
- {
- if (!string.IsNullOrWhiteSpace(DetailsText.Text))
- {
- Clipboard.SetText(DetailsText.Text);
- BtnCopyDetails.Content = "已复制";
- }
- }
- private void BtnOK_Click(object sender, RoutedEventArgs e)
- {
- Result = true;
- YesNoCancelResult = true;
- Close();
- }
- private void BtnNo_Click(object sender, RoutedEventArgs e)
- {
- Result = false;
- YesNoCancelResult = false;
- Close();
- }
- private void BtnCancel_Click(object sender, RoutedEventArgs e)
- {
- Result = false;
- YesNoCancelResult = null;
- Close();
- }
- }
- }
|