Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
>> WPF return new Rect(clientAreaLeft, clientAreaTop, clientAreaWidth, clientAreaHeight); } Listing 535: Methode zur Ermittlung des Clientbereichs eines WPF Fensters (Forts.) 793 Die Anwendung dieser Methode ist (natürlich) sehr einfach. Sie müssen aber beachten, dass das für die DPI-Umrechnung verwendete PresentationSource -Objekt vorhanden sein muss. Beim Erzeugen eines Fensters ist dies ab dem SourceInitialized -Ereignis der Fall, das direkt nach Initialized aufgerufen wird. In Initialized oder im Konstruktor liefert Presentation- Source.FromVisual kein PresentationSource -Objekt zurück. Für diesen Fall überprüft Get- ClientRectangle , ob PresentationSource.FromVisual null zurückgegeben hat, und wirft in diesem Fall eine sprechende Ausnahme. 278 Fenster über den Clientbereich verschiebbar machen Ein Fenster mit WindowStyle = None (siehe Rezept 275) oder mit einer besonderen Form (siehe Rezept 283) kann vom Anwender nicht verschoben werden, da die Titelleiste fehlt. Dieses Problem können Sie aber lösen, indem Sie dem Anwender das Verschieben des Formulars über den Clientbereich ermöglichen. Diese (unter WPF sehr einfache) Technik können Sie natürlich auch bei normalen Fenstern einsetzen. Dazu fangen Sie linke Maustaste ab und rufen die DragMove -Methode des Fensters auf: private void Window_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { // Das Verschieben des Fensters über die Maus starten this.DragMove(); } Listing 536: Das Verschieben eines Fensters über die Maus bei der Betätigung der linken Maustaste starten Wenn gleichzeitig andere Steuerelemente auf dem Fenster die linke Maustaste abfangen sollen, können Sie deren Ereignisse PreviewMouseLeftButtonDown und PreviewMouseDown verwenden, um die Weitergabe der Maus an das Fenster ggf. über e.Handled = true abbrechen zu können und damit das Verschieben zu vermeiden. 279 Windows Nachrichten verarbeiten In einem WPF-Fenster haben Sie nicht wie unter Windows.Forms die direkte Möglichkeit, Nach- richten zu verarbeiten, die Windows dem Fenster sendet. Für einige Tricks wie das Maximie- ren eines titellosen Fensters unter Berücksichtigung der Windows-Taskbar (Rezept 280) ist aber die Verarbeitung dieser Nachrichten notwendig. Tipp WPF