/// <summary> /// Sets up the connection between view and viewModel, shows the view as a metro dialog, /// calls <paramref name="onShown"/> and waits for the dialog to be closed. /// </summary> public static async Task <T> ShowDialogAsync <T>(this MetroWindow window, CloseableViewModel <T> viewModel, BaseMetroDialog view, Action onShown = null) { view.DataContext = viewModel; // Undefault buttons not in the dialog as they would be pressed instead of a dialog button on enter. var oldDefaults = window.FindVisualChildren <Button>().Where(b => b.IsDefault).ToList(); oldDefaults.ForEach(b => b.IsDefault = false); // Clear keyboard focus as they focused element is pressed instead of a dialog element on enter. var oldFocus = Keyboard.FocusedElement; Keyboard.ClearFocus(); await window.ShowMetroDialogAsync(view, new MetroDialogSettings { AnimateShow = false }); DialogParticipation.SetRegister(view, viewModel); onShown?.Invoke(); var result = await viewModel.WaitForCloseAsync(); await window.HideMetroDialogAsync(view, new MetroDialogSettings { AnimateHide = false }); DialogParticipation.SetRegister(view, null); // Restore IsDefault and keyboard focus. oldDefaults.ForEach(b => b.IsDefault = true); Keyboard.Focus(oldFocus); return(result); }
protected Task <T> ShowDialogAsync <T>(object context, CloseableViewModel <T> viewModel, BaseMetroDialog view, Action onShown = null) { var metroWindow = GetMetroWindow(context); return(metroWindow.Invoke(() => metroWindow.ShowDialogAsync(viewModel, view, onShown))); }
/// <summary> /// Sets up the connection between view and viewModel, shows the view as a metro dialog, /// calls <paramref name="onShown"/> and waits for the dialog to be closed. /// </summary> public static async Task <T> ShowDialogAsync <T>(this MetroWindow window, CloseableViewModel <T> viewModel, BaseMetroDialog view, Action onShown = null) { view.DataContext = viewModel; // Undefault buttons not in the dialog as they would be pressed instead of a dialog button on enter. var oldDefaults = window.FindVisualChildren <Button>().Where(b => b.IsDefault).ToList(); oldDefaults.ForEach(b => b.IsDefault = false); // Save old keyboard focus. var oldFocus = Keyboard.FocusedElement; await window.ShowMetroDialogAsync(view, new MetroDialogSettings { AnimateShow = false }); // Focus the first focusable element in the view var element = view.FindVisualChildren <UIElement>().FirstOrDefault(e => e.Focusable); element?.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => Keyboard.Focus(element))); onShown?.Invoke(); var result = await viewModel.WaitForCloseAsync(); await window.HideMetroDialogAsync(view, new MetroDialogSettings { AnimateHide = false }); // Restore IsDefault and keyboard focus. oldDefaults.ForEach(b => b.IsDefault = true); Keyboard.Focus(oldFocus); return(result); }
public static bool?ShowDialog(CloseableViewModel viewModel) { var win = new Window { Content = viewModel, SizeToContent = SizeToContent.WidthAndHeight }; viewModel.ClosingRequest += (sender, e) => win.Close(); return(win.ShowDialog()); }
public static void ShowWindow(CloseableViewModel viewModel) { var win = new Window { Content = viewModel, SizeToContent = SizeToContent.WidthAndHeight }; viewModel.ClosingRequest += (sender, e) => win.Close(); win.Show(); }
protected async Task ShowDialogAsync(object context, CloseableViewModel viewModel, BaseMetroDialog view, Action onShown = null) { var metroWindow = await GetMetroWindowAsync(context); await metroWindow.ShowDialogAsync(viewModel, view, onShown); }
/// <summary> /// Sets up the connection between view and viewModel, shows the view as a metro dialog, /// calls <paramref name="onShown"/> and waits for the dialog to be closed. /// <paramref name="dependencyObject"/> must be located in a <see cref="MetroWindow"/>. /// </summary> public static Task ShowDialogAsync(this DependencyObject dependencyObject, CloseableViewModel viewModel, BaseMetroDialog view, Action onShown = null) { return(ShowDialogAsync((MetroWindow)Window.GetWindow(dependencyObject), viewModel, view, onShown)); }