如何在ASP.NET面板中更改Silverlight应用程序的高度
本文关键字:Silverlight 应用程序 高度 ASP NET | 更新日期: 2023-09-27 18:22:34
如何动态更改嵌入ASP.NET面板中的Silverlight应用程序的高度?'
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应用程序正在被截断。如何避免这种情况,并确保根据内容放大高度。
观察:如果我手动将silverlight对象创建代码中的Height
从100%
更改为1500px
,高度似乎增加了一点,但即使我进一步增加高度,内容仍然会被剪切。
您可以这样做:在浏览器中加载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:函数(divheight){//alert(divheight);jQuery("body").css("height",divheight);jQuery("#silverlightControlHost").css("height",divheight);jQuery("#Panel3").css("height",divheight);}}
我不是Silverlight的专家,但我对这个问题的快速反应是,修复网格的高度(layoutroot)并允许滚动(水平和垂直,无论数据是以何种方式剪切的),然后在HTML中提供固定高度的Silverlight对象。