private async Task <TViewModel> HandleCreateWindow <TUserControl, TViewModel>(DXWindow window, bool isModal = false) where TUserControl : UserControl where TViewModel : IViewModel { var model = AppCore.Instance.ObjectProvider.GetInstance <TViewModel>(); await model.Initialize(); //injaect via DI model.Host = window; window.DataContext = null; window.DataContext = model; window.Closing += (sender, e) => { var win = (DXWindow)sender; var todispose = win.DataContext as IDisposable; todispose?.Dispose(); _windowsRegistry.Remove(win); }; window.Show(); window.Activate(); window.Topmost = true; window.Topmost = false; window.Focus(); _windowsRegistry.Add(window); return(model); }
private static void OpenViewInDialog(View view, View parent) { var container = new DXWindow { Width = 800, Height = 500, ShowInTaskbar = true, Title = view.GetText() ?? string.Empty, WindowStartupLocation = WindowStartupLocation.CenterScreen, Content = view.GetControl() }; if (parent != null) { container.ShowIcon = false; container.WindowState = WindowState.Normal; container.WindowStyle = WindowStyle.ToolWindow; // Закрытие диалога по нажатию на Escape container.PreviewKeyDown += (s, e) => { if (e.Key == Key.Escape) { container.Close(); } }; } else { container.ShowIcon = true; container.WindowState = WindowState.Maximized; container.WindowStyle = WindowStyle.SingleBorderWindow; container.Icon = ImageRepository.GetImage(view.GetImage()); } var closingHandling = false; var closeHandling = false; view.OnClosing += (c, a) => TryExecuteBlock(ref closingHandling, () => a.IsCancel = (a.IsCancel == true) || !CloseView(view)); view.OnClosed += (c, a) => TryExecuteBlock(ref closeHandling, container.Close); container.Closing += (c, a) => TryExecuteBlock(ref closeHandling, () => a.Cancel = a.Cancel || !view.Close()); var gotFocusHandling = false; view.OnGotFocus += (c, a) => TryExecuteBlock(ref gotFocusHandling, () => container.Focus()); container.GotFocus += (s, e) => TryExecuteBlock(ref gotFocusHandling, () => view.InvokeScript(view.OnGotFocus)); var lostFocusHandling = false; container.LostFocus += (s, e) => TryExecuteBlock(ref lostFocusHandling, () => view.InvokeScript(view.OnLostFocus)); view.OnTextChanged += (c, a) => container.Title = a.Value; container.ShowDialog(); }