代码之家  ›  专栏  ›  技术社区  ›  Oliver

确定页面高度的Silverlight插件?

  •  1
  • Oliver  · 技术社区  · 15 年前

    我目前正在开发一个Silverlight业务应用程序,因此遇到了一个小问题,我正在寻找一些帮助。

    在我开发的一些应用程序中(在Silverlight中)可以变得相当长,但是我发现的是ASPX或浏览器正在确定页面大小,因此Silverlight控件试图适应这个页面。但不能这样剪辑内容。

    我要找的行为如下:

    所有网格都设置为“自动”,以允许它们接受其内容的大小(图像、窗体扩展程序等),这应允许网格增长(至少垂直),并且随着Silverlight扩展以适应/容纳内容,这应在浏览器中创建滚动条。

    我该如何实现这种行为?

    基本上所有的aspx页面都是一个silverlight的容器…整个应用程序将通过Silverlight完成。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Elisha    15 年前

    您所面临的行为是由于HTML在控件上设置的限制。它可以通过预先在所有容器层次上放置高度100%来解决,并且当控件的大小改变时通知体元素:

    HTML例如:

    <html xmlns="http://www.w3.org/1999/xhtml" style="height:100%;">
    <head runat="server">
        <title>SilverlightApplication1</title>
    </head>
    <body style="height:100%;margin:0;">
        <form id="form1" runat="server" style="height:100%;">
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            <div  style="height:100%;">
                <asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/SilverlightApplication1.xap" MinimumVersion="2.0.31005.0" Width="100%" Height="100%" />
            </div>
        </form>
    </body>
    </html>
    

    以及后面控制代码中的通知:

    public Page()
    {
        InitializeComponent();
        SizeChanged += new SizeChangedEventHandler(Page_SizeChanged);
    
    }
    
    void Page_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        HtmlPage.Document.Body.SetStyleAttribute("height", e.NewSize.Height + "px");
    }
    
        2
  •  0
  •   Oliver    14 年前

    这是我最终所做的,这远远不是完美的,但也许有人可以接受并改进它:

     private void Page_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            BrowserInformation oInfo = System.Windows.Browser.HtmlPage.BrowserInformation;
    
            double nHeight=0;
            if (oInfo.Name.ToLower().Contains("explorer"))
            {
                nHeight = (double)HtmlPage.Document.DocumentElement.GetProperty("clientHeight");
            }
            else if (oInfo.Name.ToLower().Contains("netscape"))
            {
                nHeight = (double)HtmlPage.Window.GetProperty("innerHeight");
            }
    
    
            if ((e.NewSize.Height + 160) > nHeight)
            {
                HtmlPage.Document.Body.SetStyleAttribute("height", (e.NewSize.Height + 160) + "px");
            }
            else
            {
                HtmlPage.Document.Body.RemoveAttribute("style");
            }
        }