在UWP中的辅助监视器上打开新窗口

时间:2018-12-25 15:08:18

标签: c# uwp

我有一个带有两个监视器的UWP项目,我想使用它们在辅助监视器上打开一个新窗口。该应用程序包括三个部分:

  1. 在第一台显示器上打开主页
  2. 创建新页面
  3. 在辅助监视器上打开

我正确地编写了第一部分和第二部分,但是找不到第三部分的解决方案。

请帮助我将窗口移至另一台显示器。

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

      //called creat new page function
        NewWindow();
    }

    private async void NewWindow()
    {
        var myview = CoreApplication.CreateNewView();
        int newid = 0;
        await myview.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            Frame newframe = new Frame();
            newframe.Navigate(typeof(Newpage), null);

            Window.Current.Content = newframe;
            Window.Current.Activate();
            ApplicationView.GetForCurrentView().Title = "Z";

            newid = ApplicationView.GetForCurrentView().Id;
        });

        await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newid, ViewSizePreference.UseMinimum);

    }

}

3 个答案:

答案 0 :(得分:1)

根据@Ehssan的建议,ProjectionManager Class满足您的要求。创建新视图时,可以使用ProjectionManager.StartProjectingAsync Method将其发送到投影仪或其他辅助显示器。

您可以查看官方的Projection sample了解更多信息。

答案 1 :(得分:1)

我找到了解决方案,并使用了ProjectionManger Class

 private async void expand()
    {
        var NewWindow = CoreApplication.CreateNewView();
        int Windowid = ApplicationView.GetForCurrentView().Id;
        int NewWindowid = 0;

        await NewWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            Frame newframe = new Frame();
            newframe.Navigate(typeof(Newpage), null);

            Window.Current.Content = newframe;
            Window.Current.Activate();
            ApplicationView.GetForCurrentView().Title = "New Page";

            NewWindowid = ApplicationView.GetForCurrentView().Id;
        });

        //Call ProjectionManager class for moving new window to secodary display
        bool available = ProjectionManager.ProjectionDisplayAvailable;

        ProjectionManager.ProjectionDisplayAvailableChanged += (s, e) =>
        {
            available = ProjectionManager.ProjectionDisplayAvailable;
        };

        await ProjectionManager.StartProjectingAsync(NewWindowid, Windowid);
    }

答案 2 :(得分:0)

这可能有助于您识别显示器。

this.Location = Screen.AllScreens[1].WorkingArea.Location;