/// <summary> /// Creates a MessageDialog inside of the current window. /// </summary> /// <param name="title">The title of the MessageDialog.</param> /// <param name="message">The message contained within the MessageDialog.</param> /// <param name="style">The type of buttons to use.</param> /// <param name="settings">Optional Settings that override the global metro dialog settings.</param> /// <returns>A task promising the result of which button was pressed.</returns> public static Task<MessageDialogResult> ShowMessageAsync(this MetroWindow window, string title, string message, MessageDialogStyle style = MessageDialogStyle.Affirmative, MetroDialogSettings settings = null) { window.Dispatcher.VerifyAccess(); return window.ShowOverlayAsync().ContinueWith(z => { return (Task<MessageDialogResult>)window.Dispatcher.Invoke(new Func<Task<MessageDialogResult>>(() => { if (settings == null) settings = window.MetroDialogOptions; //create the dialog control MessageDialog dialog = new MessageDialog(window, settings); dialog.Message = message; dialog.Title = title; dialog.ButtonStyle = style; SizeChangedEventHandler sizeHandler = SetupAndOpenDialog(window, dialog); dialog.SizeChangedHandler = sizeHandler; return dialog.WaitForLoadAsync().ContinueWith(x => { if (DialogOpened != null) { window.Dispatcher.BeginInvoke(new Action(() => DialogOpened(window, new DialogStateChangedEventArgs() { }))); } return dialog.WaitForButtonPressAsync().ContinueWith(y => { //once a button as been clicked, begin removing the dialog. dialog.OnClose(); if (DialogClosed != null) { window.Dispatcher.BeginInvoke(new Action(() => DialogClosed(window, new DialogStateChangedEventArgs() { }))); } Task closingTask = (Task)window.Dispatcher.Invoke(new Func<Task>(() => dialog._WaitForCloseAsync())); return closingTask.ContinueWith<Task<MessageDialogResult>>(a => { return ((Task)window.Dispatcher.Invoke(new Func<Task>(() => { window.SizeChanged -= sizeHandler; window.messageDialogContainer.Children.Remove(dialog); //remove the dialog from the container return window.HideOverlayAsync(); //window.overlayBox.Visibility = System.Windows.Visibility.Hidden; //deactive the overlay effect }))).ContinueWith(y3 => y).Unwrap(); }); }).Unwrap(); }).Unwrap().Unwrap(); })); }).Unwrap(); }
/// <summary> /// Creates a MessageDialog inside of the current window. /// </summary> /// <param name="title">The title of the MessageDialog.</param> /// <param name="message">The message contained within the MessageDialog.</param> /// <param name="style">The type of buttons to use.</param> /// <returns>A task promising the result of which button was pressed.</returns> public static Task<MessageDialogResult> ShowMessageAsync(this MetroWindow window, string title, string message, MessageDialogStyle style = MessageDialogStyle.Affirmative) { window.Dispatcher.VerifyAccess(); return window.ShowOverlayAsync().ContinueWith(z => { return window.Dispatcher.Invoke(new Func<object>(() => { //create the dialog control MessageDialog dialog = new MessageDialog(window); dialog.Message = message; dialog.ButtonStyle = style; dialog.AffirmativeButtonText = window.MetroDialogOptions.AffirmativeButtonText; dialog.NegativeButtonText = window.MetroDialogOptions.NegativeButtonText; SizeChangedEventHandler sizeHandler = SetupAndOpenDialog(window, title, dialog); dialog.SizeChangedHandler = sizeHandler; return dialog.WaitForLoadAsync().ContinueWith(x => { return dialog.WaitForButtonPressAsync().ContinueWith<MessageDialogResult>(y => { //once a button as been clicked, begin removing the dialog. dialog.OnClose(); return ((Task)window.Dispatcher.Invoke(new Func<Task>(() => { window.SizeChanged -= sizeHandler; window.messageDialogContainer.Children.Remove(dialog); //remove the dialog from the container return window.HideOverlayAsync(); //window.overlayBox.Visibility = System.Windows.Visibility.Hidden; //deactive the overlay effect }))).ContinueWith(y3 => y).Result.Result; }).Result; }); })); }).ContinueWith(x => ((Task<MessageDialogResult>)x.Result).Result); }
private static void SetButtonState(MessageDialog md) { if (md.PART_AffirmativeButton == null) return; switch (md.ButtonStyle) { case MessageDialogStyle.Affirmative: { md.PART_AffirmativeButton.Visibility = Visibility.Visible; md.PART_NegativeButton.Visibility = Visibility.Collapsed; md.PART_FirstAuxiliaryButton.Visibility = Visibility.Collapsed; md.PART_SecondAuxiliaryButton.Visibility = Visibility.Collapsed; } break; case MessageDialogStyle.AffirmativeAndNegativeAndSingleAuxiliary: case MessageDialogStyle.AffirmativeAndNegativeAndDoubleAuxiliary: case MessageDialogStyle.AffirmativeAndNegative: { md.PART_AffirmativeButton.Visibility = Visibility.Visible; md.PART_NegativeButton.Visibility = Visibility.Visible; if (md.ButtonStyle == MessageDialogStyle.AffirmativeAndNegativeAndSingleAuxiliary || md.ButtonStyle == MessageDialogStyle.AffirmativeAndNegativeAndDoubleAuxiliary) { md.PART_FirstAuxiliaryButton.Visibility = Visibility.Visible; } if (md.ButtonStyle == MessageDialogStyle.AffirmativeAndNegativeAndDoubleAuxiliary) { md.PART_SecondAuxiliaryButton.Visibility = Visibility.Visible; } } break; } md.AffirmativeButtonText = md.DialogSettings.AffirmativeButtonText; md.NegativeButtonText = md.DialogSettings.NegativeButtonText; md.FirstAuxiliaryButtonText = md.DialogSettings.FirstAuxiliaryButtonText; md.SecondAuxiliaryButtonText = md.DialogSettings.SecondAuxiliaryButtonText; switch (md.DialogSettings.ColorScheme) { case MetroDialogColorScheme.Accented: md.PART_NegativeButton.Style = md.FindResource("AccentedDialogHighlightedSquareButton") as Style; md.PART_FirstAuxiliaryButton.Style = md.FindResource("AccentedDialogHighlightedSquareButton") as Style; md.PART_SecondAuxiliaryButton.Style = md.FindResource("AccentedDialogHighlightedSquareButton") as Style; break; } }
private static void SetButtonState(MessageDialog md) { if (md.PART_AffirmativeButton == null) return; switch (md.ButtonStyle) { case MessageDialogStyle.Affirmative: { md.PART_AffirmativeButton.Visibility = Visibility.Visible; md.PART_NegativeButton.Visibility = Visibility.Collapsed; } break; case MessageDialogStyle.AffirmativeAndNegative: { md.PART_AffirmativeButton.Visibility = Visibility.Visible; md.PART_NegativeButton.Visibility = Visibility.Visible; } break; } }