私はその要求を理解しています。重要なのは、これらの値を取得するためのWPFメソッドがありますが、そうです、貢献者の1人は正しく、直接ではありません。解決策は、これらすべての回避策を取得することではなく、クリーンな設計と開発に従って初期アプローチを変更することです。
A)最初のメインウィンドウを画面に設定します
B)大量の便利なWPFメソッドを含むActualWindowの値を取得します
C)サイズ変更や最小化など、必要な動作に合わせてWindowsをいくつでも追加できますが、ロードおよびレンダリングされた画面にはいつでもアクセスできます。
次の例に注意してください。そのようなアプローチを使用する必要があるコードがいくつかありますが、それは機能するはずです(画面の各コーナーにポイントが与えられます):シングルでの作業例、デュアルモニターと異なる解像度(プライマルメインウィンドウクラス内):
InitializeComponent();
[…]
ActualWindow.AddHandler(Window.LoadedEvent, new RoutedEventHandler(StartUpScreenLoaded));
ルーティングされたイベント:
private void StartUpScreenLoaded(object sender, RoutedEventArgs e)
{
Window StartUpScreen = sender as Window;
Dispatcher.Invoke(new Action(() =>
{
StartUpScreen.InvalidateVisual();
System.Windows.Point CoordinatesTopRight = StartUpScreen.TranslatePoint(new System.Windows.Point((StartUpScreen.ActualWidth), (0d)), ActualWindow);
System.Windows.Point CoordinatesBottomRight = StartUpScreen.TranslatePoint(new System.Windows.Point((StartUpScreen.ActualWidth), (StartUpScreen.ActualHeight)), ActualWindow);
System.Windows.Point CoordinatesBottomLeft = StartUpScreen.TranslatePoint(new System.Windows.Point((0d), (StartUpScreen.ActualHeight)), ActualWindow);
System.Windows.Application.Current.Resources["StartUpScreenPointTopRight"] = CoordinatesTopRight;
System.Windows.Application.Current.Resources["StartUpScreenPointBottomRight"] = CoordinatesBottomRight;
System.Windows.Application.Current.Resources["StartUpScreenPointBottomLeft"] = CoordinatesBottomLeft;
}), DispatcherPriority.Loaded);
}