我目前正在开发一个Silverlight业务应用程序,所以我遇到了一个小问题,我正在寻找一些帮助。
在我开发的应用程序中,一些页面(在silverlight中)可能会变得很长,但我发现ASPX或浏览器正在确定页面大小,因此silverlight控件试图适应这个...但不能这样剪辑内容。
我正在寻找的行为如下:
所有网格都设置为自动以允许它们采用其内容的大小(图像,表单扩展器等),这应该允许网格增长(至少垂直),这应该在浏览器中创建滚动条作为Silverlight扩展以适应/容纳内容。
如何实现此行为?
基本上所有ASPX页面都是Silverlight的容器......整个应用程序将通过Silverlight完成。
答案 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");
}
}