2017-02-20 4 views
0

Gibt es in einer UWP-Desktop-App eine Möglichkeit, die Anwendung auf einem bestimmten Monitor zu öffnen. (In meinem Fall habe ich einen Laptop und zusätzlichen Bildschirm an den Laptop angeschlossen, so dass ich möchte, dass die den Startbildschirm in Code angeben)Angeben des Startbildschirms für die UWP-App

habe ich den folgenden Code in WinForms:

Screen[] screens = Screen.AllScreens; 

if (Screen.AllScreens.Length == 1) 
      { 
       Application.Run(new frmMain()); 
      } 
else 
{ 
    //select largest monitor and set new monitor 
    Rectangle bounds = screens[LargestScreen].Bounds; 
    frm.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height); 
    frm.StartPosition = FormStartPosition.Manual; 

    Application.Run(frm); 
} 

Irgendeine Idee, wie man implementieren Sie das oben in einer UWP App?

Antwort

0

Sie sollten in der Lage sein, multiple views für die App zu erstellen und ProjectionManager Klasse mit Methode StartProjectingAsync zu verwenden, um die sekundäre Ansicht auf einem anderen Bildschirm anzuzeigen. Sie können dies in OnLaunched Methode tun, dann, sobald die App startet die sekundäre Ansicht wird auf dem Bildschirm angezeigt, die Sie wollen.

protected override async void OnLaunched(LaunchActivatedEventArgs e) 
{ 
    if (System.Diagnostics.Debugger.IsAttached) 
    { 
     this.DebugSettings.EnableFrameRateCounter = true; 
    } 
    Frame rootFrame = Window.Current.Content as Frame; 
    if (rootFrame == null) 
    { 
     // Create a Frame to act as the navigation context and navigate to the first page 
     rootFrame = new Frame(); 
     rootFrame.NavigationFailed += OnNavigationFailed; 
     if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) 
     { 
      //TODO: Load state from previously suspended application 
     } 
     // Place the frame in the current Window 
     Window.Current.Content = rootFrame; 
    } 
    ///Get all the screens. 
    String projectorSelectorQuery = ProjectionManager.GetDeviceSelector(); 
    var outputDevices = await DeviceInformation.FindAllAsync(projectorSelectorQuery); 
    //if(outputDevices.Count==1) 
    //{ 

    //} 
    int thisViewId; 
    int newViewId = 0; 
    ///Choose one screen for display . 
    DeviceInformation showDevice = outputDevices[1]; 
    thisViewId = ApplicationView.GetForCurrentView().Id; 
    if (e.PrelaunchActivated == false) 
    { 
     if (rootFrame.Content == null) 
     { 
     }   
     Window.Current.Activate(); 
    } 
    ///Create a new view 
    await CoreApplication.CreateNewView().Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
    { 
     Frame frame = new Frame(); 
     frame.Navigate(typeof(MainPage), null); 
     Window.Current.Content = frame;   
     Window.Current.Activate(); 
     newViewId = ApplicationView.GetForCurrentView().Id; 
    }); 
    await ProjectionManager.StartProjectingAsync(newViewId, thisViewId, showDevice); 

} 

Aber es scheint, wie der erste Blick nicht direkt auf andere Bildschirme zeigen werden, da die StartProjectingAsync Methode eine neue Ansicht ID erfordert. Die erste Ansicht, die beim Start der App erstellt wird, wird als Hauptansicht bezeichnet. Sie erstellen diese Ansicht nicht. Es ist von der App erstellt. Der Thread der Hauptansicht dient als Manager für die App und alle App-Aktivierungsereignisse werden für diesen Thread bereitgestellt. Und die Hauptansicht kann nicht geschlossen werden, sodass die erste Hauptansicht immer noch auf dem ersten Bildschirm angezeigt wird.

Details bitte Bezug auf die Projection official sample.

+0

Vielen Dank, Sie haben meine Frage beantwortet. – user3385105

Verwandte Themen