我的silverlight 3应用程序有一种情况,主应用程序页面的初始加载显示浏览器水平滚动条。
silverlight控件的宽度和高度是这样的,我应该得到一个垂直滚动条(我这样做),没有水平滚动条。
我们有一个BrowserScrollHelper类,用于将Silverlight控件大小传递给PageLoad和PageResize上包含的HTML元素,根据本文http://forums.silverlight.net/forums/p/26996/442817.aspx中提出的讨论。
如果我然后最大化/恢复浏览器窗口,则水平滚动条消失。它只是初始页面加载似乎无法确定水平滚动条的初始需求状态。
我知道我可以使用CSS属性overflow-x: hidden
来删除滚动条,但这只是掩盖了问题。此外,目前应用程序不需要水平滚动,但我无法保证始终如此。
需要注意的限制因素。 IE8是首选浏览器,屏幕分辨率锁定在1024x768。
答案 0 :(得分:1)
我看到浏览器(IE 8)生成了随机的额外显示,但无法跟踪它。
特别是在屏幕底部高8像素的条带导致垂直滚动条出现(尽管SL对象是100%并且不存在其他元素)。
最后我将overflow属性更改为hidden。在任何CSS浏览器中使用该隐藏选项(即运行SL的任何东西)都是完全有效的,所以不要过于担心它是“坏”。
然而,我也会对任何其他有助于追踪这些故障的实际原因的答案感兴趣。
答案 1 :(得分:0)
管理以解决滚动条发生的问题。
我们用于将silverlight控件的大小传回浏览器的BrowserScrollHelper中的代码使用了以下代码:
double clientWidth = BrowserScreenInformation.ClientWidth;
double clientHeight = BrowserScreenInformation.ClientHeight;
double width = Math.Max( clientWidth, this.MinWidth );
double height = Math.Max( clientHeight, this.MinHeight );
htmlElement.SetStyleAttribute( "height", height.ToString( ) );
htmlElement.SetStyleAttribute( "width", width.ToString( ) );
虽然这段代码在表面上看起来还不错,但它只是完成了部分工作。关键是要意识到设置高度可能会影响宽度,反之亦然,我们只是在应用程序启动时运行此代码一次。
决议是遵循以下两种模式:
设置高度,设置宽度,设置高度
OR
设置宽度,设置高度,设置宽度
这确保了单次传递代码可以正确地将silverlight控件的大小传回浏览器,从而使其有机会使垂直和水平滚动条正确。
工作代码如下所示:
double clientHeight = BrowserScreenInformation.ClientHeight;
double height = Math.Max( clientHeight, this.MinHeight );
htmlElement.SetStyleAttribute( "height", height.ToString( ) );
double clientWidth = BrowserScreenInformation.ClientWidth;
double width = Math.Max( clientWidth, this.MinWidth );
htmlElement.SetStyleAttribute( "width", width.ToString( ) );
clientHeight = BrowserScreenInformation.ClientHeight;
height = Math.Max( clientHeight, this.MinHeight );
htmlElement.SetStyleAttribute( "height", height.ToString( ) );
在我们的案例中,最终用户最有可能启动浏览器最大化并将其保留在整个会话的配置中,而不执行任何调整浏览器窗口的大小。