ユーザー画面の最大幅/高さに基づいて、Window
の幅と高さを動的に設定したい。これをプログラムで決定するにはどうすればよいですか?
主画面の場合:
System.Windows.SystemParameters.PrimaryScreenWidth
System.Windows.SystemParameters.PrimaryScreenHeight
(さまざまな要因に依存する他のプライマリ画面関連のプロパティもあることに注意してください、Full*
&Maximised*
)
仮想画面:
SystemParameters.VirtualScreenWidth
SystemParameters.VirtualScreenHeight
プログラムが実行されているモニターの特定の次元が必要な場合(誰かが複数のモニターを実行している場合)、次のコマンドも使用できます。
var helper = new WindowInteropHelper(this); //this being the wpf form
var currentScreen = Screen.FromHandle(helper.Handle);
これにより、プログラムが実行されているモニターを参照する画面オブジェクトが返されます。そこから、currentScreen.Bounds.Width
/Height
プロパティ(フルサイズ)またはcurrentScreen.WorkingArea.Width
/Height
(マイナスタスクバーなど)を使用できます。あなたが欲しい。
画面オブジェクトを使用
Screen.PrimaryScreen.Bounds.Width
SizeChanged
イベントを使用できます
SizeChanged="MyWindow_SizeChanged"
次に、イベントハンドラーで、
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.MinWidth > 0 && this.MinHeight > 0)
{
double heightScaleFactor = e.NewSize.Height / this.MinHeight;
double widthScaleFactor = e.NewSize.Width / this.MinWidth;
mainGrid.LayoutTransform = new ScaleTransform(heightScaleFactor, widthScaleFactor);
}
}
ここで、MainGrid
はMyWindow
のすべてのコンテンツのコンテナです。
Ranorex Studio 8.0.1 + git.8a3e1a6fから呼び出す場合、Windows 10 Enterpriseで.NET 4.0.30319.42000の下で上記のソリューションを使用できなかったため、次の行を使用しました。
using WinForms = System.Windows.Forms;
[…]
SetWindowPos(processes[0].MainWindowHandle,
0,
y,
x,
WinForms.SystemInformation.PrimaryMonitorSize.Width,
WinForms.SystemInformation.PrimaryMonitorSize.Height,
SWP.SHOWWINDOW);