【问题标题】:Open new window on secondary monitor in UWP在 UWP 的辅助监视器上打开新窗口
【发布时间】:2018-12-25 15:08:18
【问题描述】:

我有一个带有两个监视器的 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);

    }

}

【问题讨论】:

  • 看看 ProjectionManager 类..
  • 这是一个 winforms 应用吗?
  • 不,它是 UWP 应用

标签: c# uwp


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我找到了解决方案并使用了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);
        }
    

    【讨论】:

      【解决方案3】:

      这可能有助于您识别监视器。

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

      【讨论】:

      • 屏幕类在 WFP 平台上工作,但我不知道它在 UWP 中是如何工作的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 2022-08-22
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多