Rozumiem wymagania. Chodzi o to, że istnieją metody WPF do pobierania tych wartości - ale tak, jeden z współautorów ma rację, nie bezpośrednio. Rozwiązaniem nie jest uzyskanie wszystkich tych obejść, ale zmiana początkowego podejścia zgodnie z czystym projektem i rozwojem.
A) Ustaw początkowe okno główne na ekran
B) Uzyskaj wartości dla ActualWindow, w tym mnóstwo przydatnych metod WPF
C) Możesz dodać tyle okien, ile chcesz, aby uzyskać zachowanie, które chcesz, na przykład zmienić rozmiar, zminimalizować cokolwiek… ale teraz zawsze możesz uzyskać dostęp do załadowanego i renderowanego ekranu
Proszę uważać na poniższy przykład, istnieje kod, który sprawia, że konieczne jest użycie tego rodzaju podejścia, jednak powinno działać (dałoby ci punkty za każdy z rogów twojego ekranu): Przykład roboczy na pojedynczym, Podwójny monitor i różne rozdzielczości (w klasie pierwotnego okna głównego):
InitializeComponent();
[…]
ActualWindow.AddHandler(Window.LoadedEvent, new RoutedEventHandler(StartUpScreenLoaded));
Wydarzenie kierowane:
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);
}