用于确定页面高度的Silverlight插件?

时间:2009-10-30 07:17:28

标签: xaml silverlight-3.0 c#-3.0

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

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

我正在寻找的行为如下:

所有网格都设置为自动以允许它们采用其内容的大小(图像,表单扩展器等),这应该允许网格增长(至少垂直),这应该在浏览器中创建滚动条作为Silverlight扩展以适应/容纳内容。

如何实现此行为?

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

2 个答案:

答案 0 :(得分:0)

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

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");
}

答案 1 :(得分:0)

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

 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");
        }
    }