Entiendo las demandas. La cuestión es que existen métodos WPF para obtener esos valores, pero sí, uno de los contribuyentes tiene razón, no directamente. La solución no es obtener todas esas soluciones, sino cambiar el enfoque inicial de acuerdo con un diseño y desarrollo limpios.
A) Configure la ventana principal inicial en pantalla
B) Obtenga los valores para ActualWindow que incluyen una tonelada de métodos útiles de WPF
C) Puede agregar tantas ventanas como desee para el comportamiento que desea tener, como redimensionable, minimizado lo que sea ... pero ahora siempre puede acceder a la pantalla cargada y renderizada
Tenga cuidado con el siguiente ejemplo, hay un código que hace que sea necesario usar ese tipo de enfoque, sin embargo, debería funcionar (le daría los puntos para cada una de las esquinas de su pantalla): Ejemplo de trabajo en una sola, Monitor dual y diferentes resoluciones (dentro de la clase de ventana principal Primal):
InitializeComponent();
[…]
ActualWindow.AddHandler(Window.LoadedEvent, new RoutedEventHandler(StartUpScreenLoaded));
Evento enrutado:
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);
}