WindowStartupLocation プロパティの MSDN ドキュメントによると:
CenterScreen を設定すると、マウス カーソルを含む画面の中央にウィンドウが配置されます。
CenterScreen フィールド自体の MSDN doc では、次のようにやや明確に定義されていませんが。
ウィンドウの起動位置は、ウィンドウを開いた画面の中央です。
簡単なテストでは、これが正常に機能していることを示しています。
MainWindow.xaml
<Window x:Class="CenterScreenTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button Click="button_Click">Open Window</Button>
</Window>
MainWindow.xaml.cs
using System.Windows;
namespace CenterScreenTest
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
void button_Click(object sender, RoutedEventArgs e)
{
Window window = new Window();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Show();
}
}
}
デュアル モニタ システムでこれをテストすると、ボタンをクリックしたときにマウス カーソルがある画面の中央に新しいウィンドウが表示されることがわかります。それはまさにそれがどのように機能するかです。
ただし、ウィンドウを表示する前に最大化するように設定しようとすると、アプリケーションを起動したディスプレイでのみ新しいウィンドウが最大化されます。button_Click イベント ハンドラーを次のように変更して、意味を確認します。
void button_Click(object sender, RoutedEventArgs e)
{
Window window = new Window();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.WindowState = WindowState.Maximized;
window.Show();
}
これで、ウィンドウは、ボタンをクリックしたときにマウス カーソルがどこにあるかに関係なく、アプリケーションが起動された画面でのみ最大化されます。表示後にウィンドウの状態を最大化に設定すると、CenterScreen は正しく機能します。これは、ユーザーがウィンドウを最大化するのと同じです。例えば:
void button_Click(object sender, RoutedEventArgs e)
{
Window window = new Window();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Show();
window.WindowState = WindowState.Maximized;
}
もちろん、ここでの問題は、ウィンドウを表示した後にウィンドウを最大化するのにはるかに時間がかかり、私のようなアプリでは、ウィンドウをすぐに配置する必要があることです.
解決策を知っている人はいますか?