Mittwoch, 28. Januar 2009

WPF Window als Vollbild

Ein WPF Fenster kann auch im Vollbildmodus angezeigt werden und somit den gesamten Bildschirmplatz einnehmen ohne die Windowsstartleiste

Wie funktioniert das?

Nun, es ist einfacher als man denkt. Dafür braucht man keine nativen Windows APIs aufzurufen.

Folgender XAML Code zeigt wie es geht:


<Window x:Class="WpfApplication1.Window1"


xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


Title="Window1"


WindowStyle="None"


WindowState="Maximized"


WindowStartupLocation="CenterScreen">


<Grid Background="Red">



</Grid>

</Window>

Zunächst wir der WindowState mit Maximized angegeben. Das bewirkt natürlich dass das Fenster den gesamten Bildschirm ausfüllt.

Den ganzen Bildschirm? Nein, denn unten (oder oben) [oder auch an den Seiten] befindet sich die Windows Taskbar.

Wird nun der WindowStyle wird auf None gesetzt, hat das Fenster keinen Rahmen, also auch keine Titelleiste und Controlbar.

Allerdings verschwindet nun auch die Taskbar und das Fenster füllt tatsächlich den gesamten Screen aus.

Nun kann z.B. eine Photoshow starten.


Problematisch wird es, wenn der Anwender versucht das Fenster zu schließen, denn es fehlt ja die Titelleiste mit dem Schließen bzw. Minimieren Button. Man sollte daher noch auf Events der Tasten ESC oder F11 reagieren. Diese werden standardmäßig in Vollbild Applikationen verwendet, um in den normalen Fenstermodus zurückzukehren.


public
partial
class
Window1 : Window

{



public Window1()

{

InitializeComponent();


this.KeyDown = RootKey;

}



void RootKey(object sender, KeyEventArgs e)

{


if ((e.Key == Key.Escape) (e.Key == Key.F11))

{


if (this.WindowStyle == WindowStyle.None)

{


this.WindowStyle = WindowStyle.ThreeDBorderWindow;


this.WindowState = WindowState.Normal;

}


else

{


this.WindowStyle = WindowStyle.None;


this.WindowState = WindowState.Maximized;

}


e.Handled = true;


}


}

}


Ob dieses Feature beabsichtigt ist; weiß ich nicht. Ob dieses Feature jede Anwendung benötigt? Eher nicht.

Wer allerdings eine Vollbild Anwendung entwicklen will, der kann auch das mit WPF tun, und zwar mit relativ wenig Aufwand.

1 Kommentar:

Nicholas Dieterle hat gesagt…

Wenn ich das Fenster durch das Drücken von ESC wieder auf eine normale Größte gebracht habe, so hatte ich das Problem, dass bei nochmaligem Drücken der ESC-Taste die Taskbar dennoch angezeigt wurde. Mit folgendem Code konnte ich dem entgegen wirken:

this.WindowStyle = WindowStyle.None;
this.WindowState = WindowState.Minimized;
this.WindowState = WindowState.Maximized;