Silverlight с динамической высотой - PullRequest
5 голосов
/ 09 мая 2009

У меня есть приложение silverlight, которое я хочу разрешить для размера, как обычная HTML-страница. То есть я хочу, чтобы размер плагина silverlight расширялся и сжимался по высоте, чтобы вместить динамические данные и элементы управления, которыми я заполняю приложение silverlight. Итак, скажем, у меня есть страница с сеткой и кнопка. Пользователь нажимает кнопку, и сетка получает ряд строк с изображениями, делая естественный размер сетки выше, чем в окнах браузера. Я хотел бы иметь что-то на месте, чтобы изменить размер плагина silverlight, чтобы он соответствовал DesiredSize of Grid. Следующие и несколько других попыток не работают:

// handler in my main page.
 void MainGrid_LayoutUpdated(object sender, EventArgs e)
 {
     HtmlPage.Window.Invoke("setSilverlightSize", this.MainGrid.DesiredSize.Height);
 }

<body style="height:100%;margin:0;">
    <form id="mainForm" runat="server" style="height:100%;">
        <asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager>
        <div id="SilverlightContainer"  style="height:100%;">
            <asp:Silverlight ID="SLMain" runat="server" Source="~/ClientBin/My.Silverlight.Main.xap" Version="2.0" Width="100%" Height="100%" />
        </div>
    </form>
    <script type="text/javascript">
        function setSilverlightSize(val) {
            var host = document.getElementById("SilverlightContainer");
            host.style.height = val + "px";
        }
    </script>
</body>

Желаемый размер MainGrid всегда хочет быть размером окна. Argh сказал пират.

-r

Ответы [ 4 ]

2 голосов
/ 11 мая 2009
  1. Установить переполнение на «авто»
  2. Установите прокрутку на "нет"
  3. Установите поле на «0»
  4. Установите ширину и высоту содержащего элемента в «100%»
  5. Установите ширину и высоту элемента управления Silverlight на «100%»

Это должно охватывать все ваши базы. Ниже приведен пример HTML-кода.

Попробуйте это:

<style type="text/css"> 
html, body { overflow:auto } 
</style>
<head>
    <title>My App</title>
</head>
<body id="bodyId" style="margin:0;" scroll="no">
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
         <div style="position: fixed; height: 100%; width: 100%">
            <avn:Silverlight 
                ID="xamlHost" 
                runat="server" 
                Source="~/ClientBin/THE.xap" 
                MinimumVersion="x.x.xxxxx" 
                Width="100%" 
                Height="100%" 
                />
         </div>
    </form>
</body>
</html>
1 голос
/ 04 июля 2012

В моем случае я создаю событие и отправляю данные высоты в свой браузер для обработки значения высоты из JavaScript Это мой HTML-код:

/*
When Silverlight is loaded attach silverlight events
*/
function OnSilverlightLoaded(sender, args) {
    //Getting Silverlight object on page
    _silverlightControlHost = document.getElementById("SilverlightObject");
    //Subscribe to it events
    _silverlightControlHost.Content.SilverlightApp.SetHeightEvent = SetHeightEvent;
}

А это мой код Silverlight:

[ScriptableType]
public partial class MainPage
{
    //Register the event to be as accessible from script
    [ScriptableMember]
    public event EventHandler<HeightEventHandler> SetHeightEvent;

    public MainPage()
    {
        InitializeComponent();

        //Register this instance to be accessible from script
        HtmlPage.RegisterScriptableObject("SilverlightApp", this);
    }

    public void SomeMethod()
    {
        if (this.SetHeightEvent != null)
            this.SetHeightEvent(this, new HeightEventHandler() { Altura = _heightSilverObj.ToString() });
    }
}

[ScriptableType]
public class HeightEventHandler : EventArgs
{
    public string Altura { get; set; }
}

Это работает!

1 голос
/ 21 июня 2009

Я использовал это и, кажется, хорошо работает. Нужно получить рендер "ed" размера.

private void LayoutRoot_LayoutUpdated(object sender, System.EventArgs e)
{
    // Set the size of the SL object to the new rendered size of the Grid.
    ResizeSilverlightOnject(this.LayoutRoot.RenderSize.Height);
}

private void ResizeSilverlightObject( double height )
{
    HtmlPage.Window.Invoke( "ResizeObject", new object[] { height } );
}
0 голосов
/ 17 марта 2010

Если вы пытаетесь определить высоту, используя Сводную информацию о валидации (немного не связанную с этим вопросом, но полезную), попробуйте следующее В вашем Page.xaml.cs // сохраняем исходную высоту в событии Page_Loaded

void Page_Loaded(object sender, RoutedEventArgs e)
{
        SetupPage();
        this.ValidationSummary.SizeChanged += new SizeChangedEventHandler(ValidationSummary_SizeChanged);
}
void ValidationSummary_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        if (this.OriginalPageHeight == 0.0)
        {
            this.OriginalPageHeight = this.RenderSize.Height;
        }
        else
        {
            double expandSize = this.OriginalPageHeight + e.NewSize.Height;
            ResizeSilverlightObject(expandSize);
        }
    }

РЕДАКТИРОВАТЬ: добавлены функция Javascript и функция CS

    function ResizeObject(height) {
        var host = document.getElementById("uploaderHost");
        host.style.height = height + "px";
    }

public void ResizeSilverlightObject(double height)
    {
       HtmlPage.HtmlWindow.Invoke("ResizeObject", new object[] { height });

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...