C# 如何在二次显示中设置WPF窗口位置

C# 如何在二次显示中设置WPF窗口位置,c#,.net,wpf,media-player,mediaelement,C#,.net,Wpf,Media Player,Mediaelement,我有两个显示器。我想做一个媒体播放器,我想在我的辅助显示器上全屏播放视频。所以我想用WPF制作一个媒体播放器 这是我到目前为止写的代码 Screen[] _screens = Screen.AllScreens; System.Drawing.Rectangle ractagle = _screens[1].Bounds; //player is my window player.WindowState = WindowState.Maximized; player.WindowStyle =

我有两个显示器。我想做一个媒体播放器,我想在我的辅助显示器上全屏播放视频。所以我想用WPF制作一个媒体播放器

这是我到目前为止写的代码

Screen[] _screens = Screen.AllScreens;
System.Drawing.Rectangle ractagle = _screens[1].Bounds;
//player is  my window
player.WindowState = WindowState.Maximized;
player.WindowStyle = WindowStyle.None;

player.Left = ractagle.X;
player.Top = ractagle.Y;


// MediaControl is an media elements
MediaControl.Height = ractagle.Height;
MediaControl.Width = ractagle.Width;
但不知怎的,它只是在我的第一个显示器上播放。
非常感谢您的任何帮助

您需要确保正在显示的表单的
WindowStartupLocation
设置为
Manual

否则,您所做的任何操作都不会对窗口的位置产生任何影响

using System.Windows.Forms;
// reference System.Drawing
//

Screen s = Screen.AllScreens[1];

System.Drawing.Rectangle r  = s.WorkingArea;
Me.Top = r.Top;
Me.Left = r.Left;
这是我使用的窗口的XAML的标题

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="823" WindowStartupLocation="Manual">
    <Canvas Width="743">
        //Controls etc
    </Canvas>
</Window>

//控制等

5年后!但是对于其他像我一样偶然发现这个的人

如果不能或不想添加整个System.Windows.Forms dll引用,可以使用(在NuGet中搜索)


MichDenny已经为WPF移植了Windows窗体屏幕助手。当您有其他WPF参考文件不能很好地处理表单(如WPF Live Charts)时,这非常好。

我在VS 2019中使用了以下内容:

private void MaximizeToSecondaryScreen()
{
    this.Left = SystemParameters.VirtualScreenLeft;
    this.Top = SystemParameters.VirtualScreenTop;
    this.Height = SystemParameters.VirtualScreenHeight;
    this.Width = SystemParameters.VirtualScreenWidth;
}

嘿,它不工作,我仔细检查,我设置了WindowsStartUplocation手册,我制作了一个小样本来演示,它对我有效。什么不起作用?请参阅编辑我使用的XAML。很好的解决方案。但是,它仅在辅助屏幕上为您提供一个全屏窗口(您仍然可以看到窗口边框等)。如果有人无意中读到这篇文章,想要全屏显示,我在这里找到了解决方案:不适合我,我必须修改代码以编译它。(例如:Screen Screen=Screen.AllScreens.ToList()[0];…)。无论如何,将索引0更改为1不会产生任何影响。它还需要别的东西才能工作吗?我安装了WpfScreenHelper的0.3.0(当前版本)。@ExelGamboa很抱歉,它不适合您。就我而言,Nuget安装得很好。然后我构建了一个ScreenManager类,它只使用WpfScreenHelper和泛型集合。我有“public List Screens”;我在构造函数中填充了“Screens=new List(Screen.AllScreens);“然后我创建了一个方法”public Screen GetScreen(int index){return Screens[index];}”,然后我用从返回的“Screen.Bounds”填充的Rect来定位和调整应用程序的大小。我根本没有构建问题。您还安装/引用了哪些内容?也许某处有冲突?也许是真的。谢谢你提供的详细信息,我会像那样再试一次,并检查我是否做了一些不同的事情。
private void MaximizeToSecondaryScreen()
{
    this.Left = SystemParameters.VirtualScreenLeft;
    this.Top = SystemParameters.VirtualScreenTop;
    this.Height = SystemParameters.VirtualScreenHeight;
    this.Width = SystemParameters.VirtualScreenWidth;
}