Плагин Silverlight для определения высоты страницы? - PullRequest
1 голос
/ 30 октября 2009

Я сейчас работаю над бизнес-приложением silverlight, поэтому столкнулся с небольшой проблемой и ищу помощника.

В приложении, которое я разрабатываю, некоторые страницы (в Silverlight) могут стать довольно длинными, но я обнаружил, что ASPX или браузер определяет размер страницы, и, следовательно, элемент управления Silverlight пытается соответствовать этому ... но не может, поэтому обрезает содержимое.

Я ищу следующее поведение:

Для всех сеток установлено значение «Авто», что позволяет им принимать размер своего содержимого (изображений, расширений форм и т. Д.), Что должно позволить росту сетки (по крайней мере, по вертикали), и это должно создать полосы прокрутки в браузере как Silverlight расширяется, чтобы соответствовать / приспосабливать содержание.

Как мне добиться этого поведения?

По существу вся страница ASPX является контейнером для Silverlight ... все приложение будет выполнено через Silverlight.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2010

Это то, что я сделал в конце концов, это далеко от совершенства, но, может быть, кто-то может взять и улучшить это:

 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");
        }
    }
0 голосов
/ 30 октября 2009

Поведение, с которым вы сталкиваетесь, связано с ограничениями, которые 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");
}
...