protected override void OnNavigatedTo(NavigationEventArgs e) { thisViewControl = (ViewLifetimeControl) e.Parameter; mainViewId = ((App)App.Current).MainViewId; mainDispatcher = ((App)App.Current).MainDispatcher; // When this view is finally release, clean up state thisViewControl.Released += ViewLifetimeControl_Released; }
private async void StartProjecting(DeviceInformation selectedDisplay) { // If projection is already in progress, then it could be shown on the monitor again // Otherwise, we need to create a new view to show the presentation if (this.ProjectionViewPageControl == null) { // First, create a new, blank view await CoreApplication.CreateNewView().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { // ViewLifetimeControl is a wrapper to make sure the view is closed only // when the app is done with it this.ProjectionViewPageControl = ViewLifetimeControl.CreateForCurrentView(); // Assemble some data necessary for the new page var initData = new ProjectionViewPageInitializationData(); initData.MainDispatcher = thisDispatcher; initData.ProjectionViewPageControl = this.ProjectionViewPageControl; initData.MainViewId = thisViewId; // Display the page in the view. Note that the view will not become visible // until "StartProjectingAsync" is called var rootFrame = new Frame(); rootFrame.Navigate(typeof(ProjectionViewPage), initData); Window.Current.Content = rootFrame; // The call to Window.Current.Activate is required starting in Windos 10. // Without it, the view will never appear. Window.Current.Activate(); }); } try { // Start/StopViewInUse are used to signal that the app is interacting with the // view, so it shouldn't be closed yet, even if the user loses access to it rootPage.ProjectionViewPageControl.StartViewInUse(); // Show the view on a second display that was selected by the user if (selectedDisplay != null) { await ProjectionManager.StartProjectingAsync(rootPage.ProjectionViewPageControl.Id, thisViewId, selectedDisplay); } else { await ProjectionManager.StartProjectingAsync(rootPage.ProjectionViewPageControl.Id, thisViewId); } rootPage.ProjectionViewPageControl.StopViewInUse(); } catch (InvalidOperationException) { System.Diagnostics.Debug.WriteLine("Start projection failed"); } }
protected override void OnNavigatedTo(NavigationEventArgs e) { var initData = (ProjectionViewPageInitializationData)e.Parameter; // The ViewLifetimeControl is a convenient wrapper that ensures the // view is closed only when the user is done with it thisViewControl = initData.ProjectionViewPageControl; mainDispatcher = initData.MainDispatcher; mainViewId = initData.MainViewId; // Listen for when it's time to close this view thisViewControl.Released += thisViewControl_Released; }
// Loop through the collection to find the view ID // This should only be run on the main thread. bool TryFindViewLifetimeControlForViewId(int viewId, out ViewLifetimeControl foundData) { foreach (var ViewLifetimeControl in SecondaryViews) { if (ViewLifetimeControl.Id == viewId) { foundData = ViewLifetimeControl; return true; } } foundData = null; return false; }