Weiterführende Themen: Erstellen von nicht rechteckigen Fenstern
In Microsoft Expression Blend-Anwendungen kann es gewünscht sein, ein Fenster zu erstellen, das zur Laufzeit als nicht rechteckige Form angezeigt wird. Beispiele hierfür finden sich bei Desktopapplets, Widgets und Media Playern. Zum Erstellen eines nicht rechteckigen Fensters müssen Sie zuerst einige Eigenschaften des Window-Elements in der Anwendung ändern. Erstellen Sie anschließend eine Ereignishandlermethode, die es Ihnen ermöglicht, das Fenster auch ohne eine Titelleiste zu verschieben.
Transparente Darstellung eines nicht rechteckigen Fensters
Erstellen Sie ein neues Fensterdokument mit dem Namen Window1.xaml, indem Sie im Menü Datei auf Neues Element klicken. Stellen Sie im Fenster Neues Element hinzufügen sicher, dass das Kontrollkästchen Codedatei einschließen aktiviert ist, um eine entsprechende CodeBehind-Datei für Window1.xaml zu generieren.
Wählen Sie im Interaktionspanel unter Objekte und Zeitachsen das Window-Element aus, und ändern Sie dann im Eigenschaftenpanel unter Darstellung die WindowStyle-Eigenschaft (Fensterstil) in None, um die Fenstershell (die Titelleiste) zu entfernen. Drücken Sie F5, um zu prüfen, wie das Fenster ohne Standardshell aussieht. Die Standardschaltflächen Minimieren, Maximieren, Wiederherstellen und Schließen sind nicht mehr sichtbar. Darüber hinaus können Sie das Fenster auch nicht mehr ziehen. Drücken Sie ALT-F4, um das Fenster zu schließen.
Hinweis: Weitere Informationen zu den anderen WindowStyle-Optionen finden Sie unter "WindowStyle" im Thema Windows Presentation Foundation-Fenster (Übersicht) in MSDN (möglicherweise in englischer Sprache).
Aktivieren Sie im Eigenschaftenpanel unter Darstellung das Kontrollkästchen AllowsTransparency. Der Fensterrahmen ist nun nicht mehr sichtbar.
Damit das Fenster transparent wird, können Sie im Eigenschaftenpanel unter Pinsel für die Background-Eigenschaft (Hintergrund) des Window-Elements Kein Pinsel festlegen. Wenn es dem Benutzer möglich sein soll, auf den nicht sichtbaren Bereich des Fensters zu klicken, können Sie alternativ für die Background-Eigenschaft (Hintergrund) die Einstellung Pinsel mit Volltonfarbe und dann für die Alpha-Eigenschaft des Hintergrundpinsels den Wert 1 festlegen. Hierdurch bleibt der klickbare Bereich des Fensters erhalten, ist jedoch nicht mehr sichtbar.
Doppelklicken Sie schließlich unter Objekte und Zeitachsen auf LayoutRoot, um das Element zu aktivieren, und fügen Sie dann Elemente aus der Werkzeugpalette zur Zeichenfläche hinzu. Durch das Festlegen eines OpacityMask-Pinsels für ein Element können Sie verschiedene Effekte erstellen. (Weitere Informationen hierzu finden Sie unter Erstellen einer Deckkraftmaske). Mithilfe von Zeichenwerkzeugen wie dem Ellipsen- und dem Stiftwerkzeug können Sie außerdem Formen hinzufügen und Pfade zeichnen und diese Elemente dann hinter andere Elemente ziehen (klicken Sie mit der rechten Maustaste auf ein Element, und klicken Sie dann auf Sortieren). Die Kontur der Anwendung wird somit faktisch durch die Inhalte des LayoutRoot-Objekts definiert.
Drücken Sie erneut F5, um zu prüfen, wie das Fenster nun aussieht. Sie können das Fenster immer noch nicht ziehen. Drücken Sie ALT-F4, um das Fenster zu schließen.
Hinzufügen von Code, um das Ziehen des Fensters zur Laufzeit zu ermöglichen
Nachdem Sie das Fenster transparent gemacht haben, verlieren Sie ohne Titelleiste faktisch die Fähigkeit, die Fensterposition zu ändern. Damit das Fenster wieder verschoben werden kann, müssen Sie dem Fenster einen Ereignishandler hinzufügen und dann der zugehörigen CodeBehind-Datei einen kleinen Codeabschnitt hinzufügen.
Speichern Sie das Projekt auf der Festplatte, indem Sie im Menü Datei auf Alles speichern klicken. (Es ist nicht möglich, Ereignishandlermethoden zu einem Projekt hinzuzufügen, das noch nie gespeichert wurde.)
Klicken Sie, während das Window-Element unter Objekte und Zeitachsen ausgewählt ist, im Eigenschaftenpanel auf die Schaltfläche Ereignisse.
Geben Sie OnMouseLeftButtonDown neben MouseLeftButtonDown ein, und drücken Sie dann die EINGABETASTE.
Falls Microsoft Visual Studio 2008 Standard Edition oder höher installiert ist, wird der Ereignishandlercode, der nach dem Drücken der EINGABETASTE generiert wird, automatisch zur CodeBehind-Datei (Window1.xaml.cs) hinzugefügt. Anschließend wird die CodeBehind-Datei zur Bearbeitung in Visual Studio geöffnet.
Falls Visual Studio nicht installiert ist, wird der Code für die Ereignishandlermethode in die Zwischenablage kopiert, sodass Sie ihn in die CodeBehind-Datei einfügen können. Öffnen Sie die CodeBehind-Datei, indem Sie im Projektpanel auf die Datei doppelklicken. Fügen Sie den Code der generierten Ereignishandlermethode in die CodeBehind-Datei ein, und zwar direkt vor der vorletzten schließenden geschweiften Klammer (falls in der CodeBehind-Datei C# verwendet wird) oder direkt vor der End Class -Anweisung (falls in der CodeBehind-Datei VB.NET verwendet wird).
Hinweis: Falls Sie die CodeBehind-Datei nicht durch Doppelklicken im Projektpanel von Expression Blend öffnen können, ist wahrscheinlich keine Anwendung mit der Dateinamenerweiterung der CodeBehind-Datei (CS oder VB) verbunden. Windows ist dann nicht bekannt, mit welchem Programm die Datei geöffnet werden soll. Weitere Informationen zur Zuweisung von CS- und VB-Dateien mit einem Editor wie Notepad finden Sie unter Bearbeiten einer CodeBehind-Datei.
Ändern Sie die generierte Ereignishandlermethode in der CodeBehind-Datei so, dass der Ereignishandler folgendermaßen aussieht:
private void OnMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { this.DragMove(); }
Private Sub OnMouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Me.DragMove() End Sub
Drücken Sie F5, um die Anwendung auszuführen.
Sie können weitere Ereignishandlermethoden hinzufügen, z. B. eine Methode für das Click-Ereignis einer Schaltfläche, die die Close()-Methode (Schließen) in der CodeBehind-Datei aufruft. Weitere Informationen zum Erstellen von Ereignishandlermethoden finden Sie unter Ereignishandling - Übersicht.