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.