Как изменить высоту приложения Silverlight на панели ASP.NET? - PullRequest
1 голос
/ 03 февраля 2012

Как я могу динамически изменить высоту приложения Silverlight, встроенного в панель ASP.NET? '

Разметка панели ASP.NET

<asp:Panel ID="pnlResult" runat="server" Visible="false">
<br />
<div class="cpHeader">
<asp:Label ID="Label1" runat="server" Text="Search Results"></asp:Label>
</div>
<asp:Panel ID="Panel3" runat="server" class='cpResultBody'>
</asp:Panel>
</asp:Panel>

Я динамически добавляю Silverlight к указанному выше ASP.Панель NET, Panel3, как показано ниже: (Это делается для динамической передачи initparams)

HtmlGenericControl myHtmlObject = new HtmlGenericControl("object");
myHtmlObject.Attributes["data"] = "data:application/x-silverlight-2";
myHtmlObject.Attributes["type"] =  "application/x-silverlight-2";
HtmlGenericControl mySourceParam = new  HtmlGenericControl("param");
mySourceParam.Attributes["name"] = "source";
mySourceParam.Attributes["value"] = "ClientBin/MySilverlightApp.xap";
myHtmlObject.Controls.Add(mySourceParam);    
HtmlGenericControl myOnErrorParam = new HtmlGenericControl("param");   

HtmlGenericControl myInputParam = new HtmlGenericControl("param");
myInputParam.Attributes["name"] = "initparams";
myInputParam.Attributes["value"] = string.Format("param1={0},param2={1},param2={2}", param1.ToString(), param2.ToString(), param3.ToString());
myHtmlObject.Controls.Add(myInputParam);    

myHtmlObject.Attributes["width"] = "100%";
myHtmlObject.Attributes["height"] = "100%";

Panel3.Controls.Add(myHtmlObject);

Наконец, мой MainPage.xaml такой, как показано ниже.Здесь я не устанавливаю высоту.

<UserControl x:Class="MySilverlightApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:my="clr-namespace:MySilverlightApp"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<Grid x:Name="LayoutRoot" Background="WhiteSmoke" >
<Canvas Name="canvas1" HorizontalAlignment="Left" Margin="-1,-1,0,0"
VerticalAlignment="Top"/>
</Grid>
</UserControl>

Мое приложение таково, что некоторые данные представлены в виде цифр в Canvas canvas1, высота которых не может быть заранее известна.

На данный момент приложение Silverlight обрезается.Как избежать этого и обеспечить масштабирование высоты в зависимости от содержимого.

Замечание: если я вручную изменю код Height в объекте silverlight, создающий код с 100% на 1500px, высота кажетсяувеличить еще немного, но все равно содержимое обрезается, даже если я увеличу высоту.

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

Вы можете сделать это: когда элемент управления Silverlight загружен в браузер (событие Loaded), отправьте в браузер команду для увеличения div, в котором находится элемент управления, для соответствия ActualHeight элемента управления. (Vb.net)

    'tell the web page to give Silverlight more room.
    Dim so As ScriptObject = TryCast(HtmlPage.Window.Eval("jsnamespace"), ScriptObject)
    so.Invoke("GrowDiv", LayoutRoot.ActualHeight)

это скрипт:

var jsnamespace = {

GrowDiv: function (divheight) { // оповещения (divheight); jQuery ("тело"). css ("высота", divheight); jQuery ("# ​​silverlightControlHost"). css ("высота", divheight); jQuery ("# ​​Panel3"). css ("высота", divheight); } }

0 голосов
/ 03 февраля 2012

Я не очень разбираюсь в Silverlight, но мой быстрый ответ на эту проблему будет: исправить высоту сетки (layoutroot) и разрешить прокрутки (горизонтальные и вертикальные, в зависимости от того, как данные обрезаются), а затем предоставить фиксированную высоту объект Silverlight в HTML.

...