Silverlight supports fullscreen mode
Silverlight 2 has build in support for fullscreen mode.This feature can be very interested for building same online game solution or some cool video players or …When we enter to this fullscreen mode everything is hidden including browser frame.
We can also resize our application to fit new changed screen size using two events in
Application.Current.Host.Content class.This class is located in C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Reference Assemblies\System.Windows.dll and it looks like this :
public sealed class Content
{
// Fields
private EventHandler FullScreenChanged;
private EventHandler Resized;
// Events
public event EventHandler FullScreenChanged;
public event EventHandler Resized;
// Methods
public Content();
internal void FireFullScreenChanged(object sender, EventArgs args);
internal void FireResized(object sender, EventArgs args);
// Properties
public double ActualHeight { get; }
public double ActualWidth { get; }
public bool IsFullScreen { get; set; }
}
You will see on little demo project how this works in real life. First we need to add ScaleTransform in Page xaml code:
ScaleTransform ScaleX=“1” ScaleY=“1” x:Name=“Root”
After that on Load method we need to save original width and height of application before entering fullscreen mode.We declare two variables to hold this values
private double width;
private double height;
and we set values:
private void Load(object sender, RoutedEventArgs e)
{
height = this.Height;
width = this.Width;
Application.Current.Host.Content.Resized += new EventHandler(Resized);
Application.Current.Host.Content.FullScreenChanged += new EventHandler(Resized);
}
We add one method Resized to handle both our events Application.Current.Host.Content.Resized and Application.Current.Host.Content.FullScreenChanged and inside this method we set how much application will resize on entering fullscreen mode by divide ActualWidth with old width and ActualHeight with old height.
private void Resized(object sender, EventArgs e)
{
if (Application.Current.Host.Content.IsFullScreen)
{
//if is fullscreen then zoom
Root.ScaleX = (Application.Current.Host.Content.ActualWidth / width);
Root.ScaleY = (Application.Current.Host.Content.ActualHeight / height);
}
else
{
//exit fullscreen remove zoom
Root.ScaleX = 1;
Root.ScaleY = 1;
}
}
And finally we add some button to change mode from fullscreen to normal on button click
private void Button_Click(object sender, RoutedEventArgs e)
{
Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen;
}
Demo project : SilverlightFullscreenDemo