views:

1149

answers:

3

I am having issues with getting a silverlight control to appear on a page in such a way that it is as wide as the browser but as long as it needs to be.

I can't seem to nail down the CSS that enables this. The closest I have gotten is to make the Silverlight control as tall as the browser but no taller. Below is my aspx file:

<%@ Page Language="C#" AutoEventWireup="true" %>

<%@ Register Assembly="System.Web.Silverlight" Namespace="System.Web.UI.SilverlightControls"
    TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml" style="height: 100%;">
<head runat="server">
    <style type="text/css">
     body
     {
      padding: 0px;
      text-align: center;
      background-color: #22395C;
     }
     #Content
     {
      width: 100%;
      height: 100%;
      text-align: left;
     }
     .Header
     {
      width: 100%;
      height: 25px;
      clear: both;
     }
    </style>
</head>
<body style="height: 100%;">
    <form id="form1" runat="server" style="height: 100%;">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div class="Header"></div>
    <div id="Content">
     <asp:Silverlight ID="Xaml1" runat="server"
          Source="~/ClientBin/....xap"
          MinimumVersion="2.0.31005.0" 
          InitParameters="VideoId=11"
          Width="100%" Height="100%" 
          BackColor="Transparent"
          PluginBackground="Transparent"
          Windowless="true"/>
    </div>
    <div class="Header">&nbsp;</div>
    </form>
</body>
</html>
A: 

Have you tried not specifying a height to the silverlight element but containing it in a DIV element which has the following CSS properties:

#silverlight-container {

    width: 100%;
    Overflow: show;

}
Jon Winstanley
+1  A: 

Try this (it is what is automatically generated by blend when testing a silverlight app, and fills the browser window. There is an aspx line you can use to generate including a silvelight app, but I don't know if it supporst filling the browser window):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- saved from url=(0014)about:internet -->
<head>
    <title>OOD</title>

    <style type="text/css">
    html, body {
        height: 100%;
        overflow: auto;
    }
    body {
        padding: 0;
        margin: 0;
    }
    #silverlightControlHost {
        height: 100%;
    }
    </style>

    <script type="text/javascript">
        function onSilverlightError(sender, args) {

            var appSource = "";
            if (sender != null && sender != 0) {
                appSource = sender.getHost().Source;
            } 
            var errorType = args.ErrorType;
            var iErrorCode = args.ErrorCode;

            var errMsg = "Unhandled Error in Silverlight 2 Application " +  appSource + "\n" ;

            errMsg += "Code: "+ iErrorCode + "    \n";
            errMsg += "Category: " + errorType + "       \n";
            errMsg += "Message: " + args.ErrorMessage + "     \n";

            if (errorType == "ParserError")
            {
                errMsg += "File: " + args.xamlFile + "     \n";
                errMsg += "Line: " + args.lineNumber + "     \n";
                errMsg += "Position: " + args.charPosition + "     \n";
            }
            else if (errorType == "RuntimeError")
            {           
                if (args.lineNumber != 0)
                {
                    errMsg += "Line: " + args.lineNumber + "     \n";
                    errMsg += "Position: " +  args.charPosition + "     \n";
                }
                errMsg += "MethodName: " + args.methodName + "     \n";
            }

            throw new Error(errMsg);
        }
    </script>
</head>

<body>

    <!-- Runtime errors from Silverlight will be displayed here.
    This will contain debugging information and should be removed or hidden when debugging is completed -->
    <div id='errorLocation' style="font-size: small;color: Gray;"></div>

    <div id="silverlightControlHost">
     <object data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%">
      <param name="source" value="OOD.xap"/>
      <param name="onerror" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="2.0.31005.0" />

      <param name="autoUpgrade" value="true" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
          <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
      </a>
     </object>
     <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
    </div>
</body>
</html>
Zone12
+1  A: 

If the height of your Silverlight app is dynamic and you need to dynamically size it's space in the browser window, your best bet is probably the HTML Interop api. You can create a JavaScript function that takes the height as a parameter and sets the #Content div's height to that value. Then, when the page is loaded, call this JS function from Silverlight using the System.Windows.Browser.HtmlPage.Window.Invoke static method.

Something like the following might work:

...on the client...

function setContentHeight(height) {
    var content = document.getElementById("Content");
    if (content != null) {
        content.style.height = height;
    }
}

...in silverlight...

    void Page_Loaded(object sender, RoutedEventArgs e)
    {
        HtmlPage.Window.Invoke("setContentHeight", this.Height);
    }
Rich