/// <summary>
        ///     Opens a new tab with the specific view and view model.
        /// </summary>
        /// <param name="title">The tab title.</param>
        /// <param name="view">The view.</param>
        /// <param name="viewModel">The view model.</param>
        /// <param name="autoSelectNewTab">Defines if the created tab should be selected or not.</param>
        public ShellTabViewModel ShowInNewTab(string title, UserControl view, ViewModelBase viewModel,
                                              bool autoSelectNewTab = false)
        {
            view.DataContext = viewModel;
            var shellTabViewModel = new ShellTabViewModel
            {
                Pinned = false,
                Title  = title,
                View   = view
            };

            this.appShell.ViewModel.ShellTabs.Add(shellTabViewModel);

            var awareViewModel = viewModel as IShellViewStateAware;

            awareViewModel?.ShellViewStateChanged(ShellViewState.Tab);

            if (autoSelectNewTab)
            {
                this.appShell.ViewModel.SelectedTab = shellTabViewModel;
            }

            this.RegisterTabCloseable(shellTabViewModel);

            return(shellTabViewModel);
        }
        public Window ShowTabInNewWindow(ShellTabViewModel shellTab)
        {
            this.appShell.ViewModel.ShellTabs.Remove(shellTab);

            var shellViewPresenter = new ShellViewPresenter()
            {
                View = shellTab.View
            };

            var window = new Window
            {
                Content   = shellViewPresenter,
                Title     = shellTab.Title,
                MinWidth  = 400,
                MinHeight = 300
            };

            var awareViewModel = shellTab.View.DataContext as IShellViewStateAware;

            awareViewModel?.ShellViewStateChanged(ShellViewState.Window);

            window.Show();
            var windowHandle = new WindowInteropHelper(window).Handle;

            WinApi.SetForegroundWindow(windowHandle);

            this.RegisterWindowClosable(window, shellTab.View.DataContext as IClosable);
            this.UnregisterTabCloseable(shellTab);

            return(window);
        }
        private void UnregisterTabCloseable(ShellTabViewModel shellTab)
        {
            var closableView = shellTab.View?.DataContext as IClosable;

            if (closableView != null)
            {
                closableView.ClosingRequest -= this.ClosableViewOnClosingRequest;
            }
        }
コード例 #4
0
        //private DrawingService drawingService;
        public ShellTab()
        {
            InitializeComponent();

            shellTabViewModel = new ShellTabViewModel();

            DataContext = shellTabViewModel;
            txtBoxInput.Focus();
        }
        public ShellTabViewModel ShowWindowInNewTab(Window window)
        {
            var view = (window.Content as ShellViewPresenter)?.View as UserControl;
            var shellTabViewModel = new ShellTabViewModel
            {
                Pinned = false,
                Title  = window.Title,
                View   = view
            };

            this.appShell.ViewModel.ShellTabs.Add(shellTabViewModel);

            var awareViewModel = view?.DataContext as IShellViewStateAware;

            awareViewModel?.ShellViewStateChanged(ShellViewState.Tab);

            this.appShell.ViewModel.SelectedTab = shellTabViewModel;

            window.Close();

            this.RegisterTabCloseable(shellTabViewModel);

            return(shellTabViewModel);
        }
 public void CloseTab(ShellTabViewModel shellTab)
 {
     this.appShell.ViewModel.ShellTabs.Remove(shellTab);
 }