XFEstudio/MyFirstRespo / XFEToolBox/Utilities/PopupHelper.cs

using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
using XFEToolBox.Model;
using XFEToolBox.Views.Pages.Popups;
using XFEToolBox.Views.Windows;

namespace XFEToolBox.Utilities;

public static class PopupHelper
{
    private static NormalDialogPopupPage CreateNormalDialogPage(object content)
    {
        var dialogPage = new NormalDialogPopupPage();
        dialogPage.ViewModel.Content = content;
        return dialogPage;
    }

    private static ScrollViewer CreateTextContent(string text, Color textColor) => new()
    {
        Content = new TextBlock
        {
            Text = text,
            Foreground = new SolidColorBrush(textColor),
            Margin = new Thickness(20, 20, 20, 0),
            TextWrapping = TextWrapping.WrapWithOverflow
        },
        HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled,
        VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
        Resources = new ResourceDictionary
        {
            {
                typeof(ScrollBar),
                new Style
                {
                    TargetType = typeof(ScrollBar),
                    BasedOn = (Style)Application.Current.FindResource("ConsoleScrollBar")
                }
            }
        }
    };

    public static MessageBoxResult? ShowConfirmDialog(object content, bool showCancelButton = false, string confirmText = "确定", string cancelText = "取消")
    {
        var dialog = CreateNormalDialogPage(content);
        dialog.ViewModel.ConfirmText = confirmText;
        dialog.ViewModel.CancelText = cancelText;
        dialog.ViewModel.ConfirmGridLength = new GridLength(1, GridUnitType.Star);
        if (showCancelButton)
            dialog.ViewModel.CancelGridLength = new GridLength(1, GridUnitType.Star);
        return ShowDialog(dialog);
    }

    public static MessageBoxResult? ShowConfirmDialog(string text, Color textColor, bool showCancelButton = false, string confirmText = "确定", string cancelText = "取消") => ShowConfirmDialog(CreateTextContent(text, textColor), showCancelButton, confirmText, cancelText);

    public static MessageBoxResult? ShowConfirmDialog(string text, bool showCancelButton = false, string confirmText = "确定", string cancelText = "取消") => ShowConfirmDialog(text, Colors.Black, showCancelButton, confirmText, cancelText);

    public static MessageBoxResult? ShowYesOrNoDialog(object content, bool showCancelButton = false, string yesText = "是", string noText = "否")
    {
        var dialog = CreateNormalDialogPage(content);
        dialog.ViewModel.YesText = yesText;
        dialog.ViewModel.NoText = noText;
        dialog.ViewModel.YesGridLength = new GridLength(1, GridUnitType.Star);
        dialog.ViewModel.NoGridLength = new GridLength(1, GridUnitType.Star);
        if (showCancelButton)
            dialog.ViewModel.CancelGridLength = new GridLength(1, GridUnitType.Star);
        return ShowDialog(dialog);
    }

    public static MessageBoxResult? ShowYesOrNoDialog(string text, Color textColor, bool showCancelButton = false, string yesText = "是", string noText = "否") => ShowYesOrNoDialog(CreateTextContent(text, textColor), showCancelButton, yesText, noText);

    public static MessageBoxResult? ShowYesOrNoDialog(string text, bool showCancelButton = false, string yesText = "是", string noText = "否") => ShowYesOrNoDialog(text, Colors.Black, showCancelButton, yesText, noText);

    public static MessageBoxResult? ShowDialog(object content, double width = 320, double height = 230)
    {
        var popupWindow = new PopupWindow
        {
            Width = width,
            Height = height
        };
        popupWindow.ViewModel.Content = content;
        if (content is IPopupPage popupPage)
            popupPage.PopupWindow = popupWindow;
        popupWindow.ShowDialog();
        return popupWindow.Result;
    }
}