Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ** NEW (CLEANER, SIMPLER AND BETTER) VERSION: http://pastebin.com/2C8Vjzqw **
- using MahApps.Metro.Controls;
- using MahApps.Metro.Controls.Dialogs;
- using System;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Threading;
- namespace ComunicadorControladorTemperatura.UI.UI_Helpers
- {
- public static class DialogHelper
- {
- private static MetroDialogSettings DefaultDialogSettings = new MetroDialogSettings()
- {
- AffirmativeButtonText = "Yes",
- NegativeButtonText = "No",
- };
- public static Task HideVisibleDialogs(MetroWindow parent)
- {
- return Task.Run(async () =>
- {
- await parent.Dispatcher.Invoke(async () =>
- {
- BaseMetroDialog dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();
- while (dialogBeingShow != null)
- {
- await parent.HideMetroDialogAsync(dialogBeingShow);
- dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();
- }
- });
- });
- }
- public static MessageDialogResult ShowMessage(string title, string message, MetroWindow parent, MessageDialogStyle style = MessageDialogStyle.Affirmative, MetroDialogSettings settings = null)
- {
- HideVisibleDialogs(parent).Wait();
- AutoResetEvent autoResetEvent = new AutoResetEvent(false);
- Task<MessageDialogResult> dialogTask = null;
- parent.Dispatcher.Invoke(() =>
- {
- dialogTask = parent.ShowMessageAsync(title, message, style, settings);
- dialogTask.ContinueWith((s) => { autoResetEvent.Set(); });
- });
- autoResetEvent.WaitOne();
- return dialogTask.Result;
- }
- public static MessageDialogResult ShowMessage(string title, string message, MetroWindow parent, int timeout, MessageDialogStyle style = MessageDialogStyle.Affirmative, MetroDialogSettings settings = null, MessageDialogResult defaultResult = MessageDialogResult.Affirmative)
- {
- HideVisibleDialogs(parent).Wait();
- AutoResetEvent autoResetEvent = new AutoResetEvent(false);
- Task<MessageDialogResult> dialogTask = null;
- parent.Dispatcher.Invoke(() =>
- {
- dialogTask = parent.ShowMessageAsync(title, message, style, settings);
- dialogTask.ContinueWith((s) => { autoResetEvent.Set(); });
- });
- System.Timers.Timer timer = new System.Timers.Timer(1000) { AutoReset = false };
- bool timeouted = false;
- MessageDialog dialog = null;
- string defaultMessage = string.Empty;
- timer.Elapsed += async (s, e) =>
- {
- if (timeout <= 0)
- {
- timeouted = true;
- if (dialog != null && dialog.IsVisible)
- {
- await System.Windows.Application.Current.Dispatcher.Invoke(async () =>
- {
- try
- {
- await parent.HideMetroDialogAsync(dialog);
- }
- catch
- {
- // Logging ?
- }
- });
- }
- autoResetEvent.Set();
- }
- else
- {
- if (dialog.IsVisible)
- {
- ChangeDefaultButtonMessage(defaultMessage + " (" + timeout-- + ")", dialog, defaultResult, System.Windows.Application.Current.Dispatcher);
- timer.Start();
- }
- }
- };
- while (dialog == null)
- {
- parent.Dispatcher.Invoke(async () =>
- {
- dialog = await parent.GetCurrentDialogAsync<MessageDialog>();
- if (dialog != null)
- {
- switch (defaultResult)
- {
- case MessageDialogResult.Affirmative:
- defaultMessage = dialog.AffirmativeButtonText;
- break;
- case MessageDialogResult.Negative:
- defaultMessage = dialog.NegativeButtonText;
- break;
- case MessageDialogResult.FirstAuxiliary:
- defaultMessage = dialog.FirstAuxiliaryButtonText;
- break;
- case MessageDialogResult.SecondAuxiliary:
- defaultMessage = dialog.SecondAuxiliaryButtonText;
- break;
- }
- ChangeDefaultButtonMessage(defaultMessage + " (" + timeout-- + ")", dialog, defaultResult);
- }
- });
- Thread.Sleep(250);
- }
- timer.Start();
- autoResetEvent.WaitOne();
- return timeouted ? defaultResult : dialogTask.Result;
- }
- public static Task<MessageDialogResult> ShowMessageAsync(string title, string message, MetroWindow parent, int timeout, MessageDialogStyle style = MessageDialogStyle.Affirmative, MetroDialogSettings settings = null, MessageDialogResult defaultResult = MessageDialogResult.Affirmative)
- {
- Task<MessageDialogResult> task = new Task<MessageDialogResult>(() => ShowMessage(title, message, parent, timeout, style, settings, defaultResult));
- task.Start();
- return task;
- }
- public static Task<MessageDialogResult> ShowMessageAsync(string title, string message, MetroWindow parent, MessageDialogStyle style = MessageDialogStyle.Affirmative, MetroDialogSettings settings = null)
- {
- Task<MessageDialogResult> task = new Task<MessageDialogResult>(() => ShowMessage(title, message, parent, style, settings));
- task.Start();
- return task;
- }
- private static void ChangeDefaultButtonMessage(string message, MessageDialog dialog, MessageDialogResult defaultResult, Dispatcher dispathcer)
- {
- if (dialog == null)
- return;
- dispathcer.Invoke(() =>
- {
- ChangeDefaultButtonMessage(message, dialog, defaultResult);
- });
- }
- private static void ChangeDefaultButtonMessage(string message, MessageDialog dialog, MessageDialogResult defaultResult)
- {
- if (dialog == null)
- return;
- switch (defaultResult)
- {
- case MessageDialogResult.Affirmative:
- dialog.AffirmativeButtonText = message;
- break;
- case MessageDialogResult.Negative:
- dialog.NegativeButtonText = message;
- break;
- case MessageDialogResult.FirstAuxiliary:
- dialog.FirstAuxiliaryButtonText = message;
- break;
- case MessageDialogResult.SecondAuxiliary:
- dialog.SecondAuxiliaryButtonText = message;
- break;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement