alielie
2025-11-24 9211ec11c112e18cd99e77f889a01110a70031ce
HMI.UI/Util/ToastHelper.cs
@@ -1,5 +1,8 @@
using Panuon.WPF.UI;
using HMI.Core.Util;
using Panuon.WPF.UI;
using System;
using System.Windows;
using System.Windows.Controls;
namespace HMI.UI.Util
{
@@ -16,6 +19,18 @@
                MessageBoxIcon icon,
                ToastPosition position, double offset, int durationMs,
                ToastWindow targetWindow);
        void Error(Window window,
                string message,
                MessageBoxIcon icon,
                ToastPosition position, double offset, int durationMs,
                ToastWindow targetWindow);
        void Info(Window window,
                string message,
                MessageBoxIcon icon,
                ToastPosition position, double offset, int durationMs,
                ToastWindow targetWindow);
    }
    public class ToastHelper
@@ -27,22 +42,215 @@
            if (Instance == null) { Instance = helper; }
        }
        public static void Success(Window window,
        public static void Success(string message,
            MessageBoxIcon icon = MessageBoxIcon.Success,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                var window = Application.Current.MainWindow;
                if (window is WindowX)
                {
                    Instance.Success(window, message, icon, position, offset, durationMs, targetWindow);
                }
                else
                {
                    MessageBox.Show(message, LangUtil.Get("App.Success"));
                }
            }));
        }
        public static void Warning(string message,
            MessageBoxIcon icon = MessageBoxIcon.Warning,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                var window = Application.Current.MainWindow;
                if (window is WindowX)
                {
                    Instance.Warning(window, message, icon, position, offset, durationMs, targetWindow);
                }
                else
                {
                    MessageBox.Show(message, LangUtil.Get("App.Warn"));
                }
            }));
        }
        public static void Error(string message,
            MessageBoxIcon icon = MessageBoxIcon.Error,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                var window = Application.Current.MainWindow;
                if (window is WindowX)
                {
                    Instance.Error(window, message, icon, position, offset, durationMs, targetWindow);
                }
                else
                {
                    MessageBox.Show(message, LangUtil.Get("App.Error"));
                }
            }));
        }
        public static void Info(string message,
            MessageBoxIcon icon = MessageBoxIcon.Info,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                var window = Application.Current.MainWindow;
                if (window is WindowX)
                {
                    Instance.Info(window, message, icon, position, offset, durationMs, targetWindow);
                }
                else
                {
                    MessageBox.Show(message, LangUtil.Get("App.Info"));
                }
            }));
        }
        public static void Success(DependencyObject dp,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Success,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            if (!(dp is Window window))
            {
                window = Window.GetWindow(dp);
            }
            Instance.Success(window, message, icon, position, offset, durationMs, targetWindow);
        }
        public static void Warning(Window window,
        public static void Warning(DependencyObject dp,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Warning,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            if (!(dp is Window window))
            {
                window = Window.GetWindow(dp);
            }
            Instance.Warning(window, message, icon, position, offset, durationMs, targetWindow);
        }
        public static void Error(DependencyObject dp,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Error,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            if (!(dp is Window window))
            {
                window = Window.GetWindow(dp);
            }
            Instance.Error(window, message, icon, position, offset, durationMs, targetWindow);
        }
        public static void Info(DependencyObject dp,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Info,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            if (!(dp is Window window))
            {
                window = Window.GetWindow(dp);
            }
            Instance.Info(window, message, icon, position, offset, durationMs, targetWindow);
        }
    }
    public static class ToastUtil
    {
        public static void Success(this Window window,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Success,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            ToastHelper.Success(window, message, icon, position, offset, durationMs, targetWindow);
        }
        public static void Warning(this Window window,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Warning,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            ToastHelper.Warning(window, message, icon, position, offset, durationMs, targetWindow);
        }
        public static void Error(this Window window,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Error,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            ToastHelper.Error(window, message, icon, position, offset, durationMs, targetWindow);
        }
        public static void Info(this Window window,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Info,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            ToastHelper.Info(window, message, icon, position, offset, durationMs, targetWindow);
        }
        public static void Success(this UserControl control,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Success,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            ToastHelper.Success(Window.GetWindow(control), message, icon, position, offset, durationMs, targetWindow);
        }
        public static void Warning(this UserControl control,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Warning,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            ToastHelper.Warning(Window.GetWindow(control), message, icon, position, offset, durationMs, targetWindow);
        }
        public static void Error(this UserControl control,
            string message,
            MessageBoxIcon icon = MessageBoxIcon.Error,
            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
            ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                ToastHelper.Error(Window.GetWindow(control), message, icon, position, offset, durationMs, targetWindow);
            });
        }
        public static void Info(this UserControl control,
           string message,
           MessageBoxIcon icon = MessageBoxIcon.Error,
           ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
           ToastWindow targetWindow = ToastWindow.ActiveWindow)
        {
            ToastHelper.Info(Window.GetWindow(control), message, icon, position, offset, durationMs, targetWindow);
        }
    }
}