web-dev-qa-db-ja.com

セカンダリディスプレイでWPFウィンドウの位置を設定する方法

私は2つのディスプレイを持っています。メディアプレーヤーを作りたいのですが、セカンダリディスプレイでビデオをフルスクリーンで再生したいと思います。だから私は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;

しかし、どういうわけか、それは私の最初のディスプレイで再生されているだけです。どんな種類の助けも大歓迎です。

19
rokonoid

表示しているフォームのWindowStartupLocationManualに設定されていることを確認する必要があります

そうしないと、ウィンドウの位置に何も影響しません。

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>
18
Paul Farry

5年後!しかし、私がしたようにこれに遭遇する他の誰かのために...

System.Windows.Forms dll参照全体を追加できない、または追加したくない場合は、 WpfScreenHelper by micdenny (NuGetで検索)を使用できます。

  Screen screen = WpfScreenHelper.AllScreens[0];
  Left = screen.Bounds.Left;
  Top = screen.Bounds.Top;
  Width = screen.Bounds.Width;
  Height = screen.Bounds.Height;

Micdennyは、WPF用のWindowsフォーム画面ヘルパーを移植しました。これは、フォームでニースを再生しない他のWPF参照がある場合に優れています(WPFライブチャートなど)。

2
Eclectic