Ich verstehe die Forderungen. Die Sache ist, es gibt WPF-Methoden, um diese Werte zu erhalten - aber ja, einer der Mitwirkenden hat Recht, nicht direkt. Die Lösung besteht nicht darin, alle diese Problemumgehungen zu erhalten, sondern den ursprünglichen Ansatz entsprechend dem sauberen Design und der sauberen Entwicklung zu ändern.
A) Stellen Sie das anfängliche Hauptfenster auf Bildschirm
B) Holen Sie sich die Werte für das ActualWindow, einschließlich einer Menge nützlicher WPF-Methoden
C) Sie können so viele Fenster hinzufügen, wie Sie möchten, um das gewünschte Verhalten zu erzielen, z. B. die Größe ändern, was auch immer minimiert werden. Jetzt können Sie jedoch immer auf den Bildschirm "Geladen" und "Gerendert" zugreifen
Bitte seien Sie vorsichtig mit dem folgenden Beispiel. Es gibt einen Code, der es erforderlich macht, diesen Ansatz zu verwenden. Er sollte jedoch funktionieren (er würde Ihnen die Punkte für jede der Ecken Ihres Bildschirms geben): Arbeitsbeispiel für Single, Dual Monitor und verschiedene Auflösungen (innerhalb der primären Hauptfensterklasse):
InitializeComponent();
[…]
ActualWindow.AddHandler(Window.LoadedEvent, new RoutedEventHandler(StartUpScreenLoaded));
Routed Event:
private void StartUpScreenLoaded(object sender, RoutedEventArgs e)
{
Window StartUpScreen = sender as Window;
// Dispatcher Format B:
Dispatcher.Invoke(new Action(() =>
{
// Get Actual Window on Loaded
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);
// Set the Canvas Top Right, Bottom Right, Bottom Left Coordinates
System.Windows.Application.Current.Resources["StartUpScreenPointTopRight"] = CoordinatesTopRight;
System.Windows.Application.Current.Resources["StartUpScreenPointBottomRight"] = CoordinatesBottomRight;
System.Windows.Application.Current.Resources["StartUpScreenPointBottomLeft"] = CoordinatesBottomLeft;
}), DispatcherPriority.Loaded);
}