/// <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);
        }
Exemple #2
0
        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));
 }