Я розумію вимоги. Річ у тому, що існують методи WPF для отримання цих значень - але так, один із авторів має рацію, а не безпосередньо. Рішення полягає не в тому, щоб отримати всі ці обхідні шляхи, а в тому, щоб змінити початковий підхід відповідно до чистого проектування та розробки.
A) Встановіть для початкового головного вікна екран
B) Отримати значення для ActualWindow, включаючи масу корисних методів WPF
В) Ви можете додати скільки завгодно 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);
}