← About Jeff

Quickly resize the Silverlight plugin to zero pixels in size

August 24, 2008

When I was a test developer on the team that built the HTML DOM bridge feature for Silverlight 2, I often found myself needing to create a tiny, quick application to reproduce an issue. That meant quickly creating projects that used the dynamic test page, and without modifying the TestPage.html.

The goal was to resize or hide the Silverlight plugin and its hosting element. Here's what I've been using as a code snippet that drops the ZeroPixelPlugin in the System.Windows.Browser namespace.

One fine function call (Page.xaml.cs):

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        ZeroPixelPlugin.HideSilverlightPlugin();

        // Throw a button up there on the page that doesn't do anything
        HtmlElement button = HtmlPage.Document.CreateElement("button");
        button.SetAttribute("value", "Hello world!");
        HtmlPage.Document.Body.AppendChild(button);
    }

And here's the utility, in Visual Basic:

Imports System.Windows.Browser

Namespace System.Windows.Browser
    Public Class ZeroPixelPlugin
        ''' <summary>
        ''' Resizes the Silverlight plugin and its host element to be zero pixels 
        ''' in width and height. Only really useful for HTML
        ''' </summary>
        ''' <remarks></remarks>
        Public Shared Sub HideSilverlightPlugin()
            Dim plugin As HtmlElement = HtmlPage.Plugin
            Dim host As HtmlElement = plugin.Parent
            plugin.SetStyleAttribute("width", "0")
            plugin.SetStyleAttribute("height", "0")
            host.SetStyleAttribute("width", "0")
            host.SetStyleAttribute("height", "0")
        End Sub
    End Class
End Namespace

And in C#:

// This code is useful for Html DOM bridge testing. It is placed in this 
// namespace since it sort of assumes you're only using that feature and 
// not the rich Silverlight presentation framework.

namespace System.Windows.Browser
{
    public static class ZeroPixelPlugin
    {
        /// <summary>
        /// Resizes the Silverlight plugin and its host element to be zero pixels 
        /// in width and height. Only really useful for HTML
        /// </summary>
        public static void HideSilverlightPlugin()
        {
            HtmlElement plugin = HtmlPage.Plugin;
            HtmlElement host = plugin.Parent;
            plugin.SetStyleAttribute("width", "0");
            plugin.SetStyleAttribute("height", "0");
            host.SetStyleAttribute("width", "0");
            host.SetStyleAttribute("height", "0");
        }
    }
}

Just thought it was somewhat interesting for anybody doing work outside of the rich Silverlight presentation framework.