Capisco le richieste. Il fatto è che esistono metodi WPF per ottenere quei valori, ma sì, uno dei contributori ha ragione, non direttamente. La soluzione non è ottenere tutte quelle soluzioni alternative, ma modificare l'approccio iniziale in base a un design e uno sviluppo puliti.
A) Impostare la finestra principale iniziale su Schermo
B) Ottieni i valori per ActualWindow inclusi un sacco di utili metodi WPF
C) Puoi aggiungere tutte le finestre che vuoi per il comportamento che vuoi avere, come ridimensionabile, minimizzato qualunque ... ma ora puoi sempre accedere alla schermata caricata e renderizzata
Fai attenzione con il seguente esempio, c'è del codice in giro che rende necessario usare quel tipo di approccio, tuttavia dovrebbe funzionare (ti darebbe i punti per ciascuno degli angoli dello schermo): Esempio di lavoro su singolo, Doppio monitor e diverse risoluzioni (all'interno della classe della finestra principale principale):
InitializeComponent();
[…]
ActualWindow.AddHandler(Window.LoadedEvent, new RoutedEventHandler(StartUpScreenLoaded));
Evento indirizzato:
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);
}