NotificationWindow только один виден одновременно - PullRequest
1 голос
/ 09 сентября 2011
            NotificationWindow notify = new NotificationWindow();
            NotifyWindow win = new NotifyWindow();
            win.Header.Text = "Custom Message Header";
            win.Description.Text = "This is a custom description.";
            notify.Width = win.Width;
            notify.Height = win.Height;
            notify.Content = win;
            notify.Show(5000); 

Когда эта программа была выполнена 3 раза, [NotificationWindow за раз виден только один] Ошибка появляется notify.Show (5000). Как мне решить эту проблему ??

1 Ответ

2 голосов
/ 09 сентября 2011

Вам необходимо поддерживать очередь уведомлений, чтобы каждое уведомление появлялось за другим. Для этого вам нужно управлять такой очередью с помощью собственного кода.

Вот такой менеджер очередей уведомлений, который я выбил.

public static class NotificationManager
{
    private static Queue<FrameworkElement> queue = new Queue<FrameworkElement>();
    private static NotificationWindow window = new NotificationWindow();
    private static int duration = 5000;

    static NotificationManager()
    {
        window.Closed += window_Closed;
    }

    public static void Notify(FrameworkElement content)
    {
        if (Deployment.Current.Dispatcher.CheckAccess())
        {
            if (window.Visibility == Visibility.Collapsed && queue.Count == 0)
            {
                Show(content);
            }
            else
            {
                queue.Enqueue(content);
            }
        }
        else
        {
            Deployment.Current.Dispatcher.BeginInvoke(() => Notify(content));
        }
    }

    public static void CloseCurrentNotification()
    {
        window.Close();
    }

    private static void window_Closed(object sender, EventArgs e)
    {
        if (queue.Count > 0)
        {
            Show(queue.Dequeue());
        }
    }

    private static void Show(FrameworkElement content)
    {
        window.Content = content;
        window.Height = content.Height;
        window.Width = content.Width;
        window.Show(duration);
    }
}

Вы можете настроить свой код на: -

            NotifyWindow win = new NotifyWindow();
            win.Header.Text = "Custom Message Header";
            win.Description.Text = "This is a custom description.";
            NotificationManager.Notify(win);

Если вы будете вызывать такой код несколько раз, вы просто получите несколько уведомлений (хотя может быть трудно определить, не изменился ли текст).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...