2017-02-20 6 views
0

В настольном приложении UWP есть способ заставить приложение открыться на определенном мониторе. (В моем случае, у меня есть ноутбук и дополнительный экран, подключенный к компьютеру, так что я хочу, чтобы указать начальный экран в коде)Укажите монитор запуска для приложения UWP

Я использовал следующий код в 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); 
} 

Любая идея, как реализовать выше в приложении UWP?

ответ

0

Вы должны уметь создавать multiple views для приложения и использовать класс ProjectionManager со способом StartProjectingAsync, чтобы показать вторичный вид на другом экране. Вы можете сделать это в методе OnLaunched, а затем после запуска приложения вторичный вид отобразится на нужном экране.

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); 

} 

Но, похоже, на первый взгляд, не может быть непосредственно показать на другие экраны, так как метод StartProjectingAsync требует нового вида идентификатора. Первое представление, созданное при запуске приложения, называется основным видом. Вы не создаете это представление; он создается приложением. Поток основного представления служит менеджером приложения, и все события активации приложения доставляются по этой теме. И главный вид не может быть закрыт, поэтому основной первый вид все равно останется на первом экране.

Подробнее просьба обращаться к Projection official sample.

+0

Спасибо, вы ответили на мой вопрос. – user3385105

Смежные вопросы