【问题标题】:Unwanted horizontal browser scroll bar displayed using IE8使用 IE8 显示不需要的水平浏览器滚动条
【发布时间】:2010-10-04 05:34:44
【问题描述】:

我们的 silverlight 3 应用程序有一个情况,主应用程序页面的初始加载显示浏览器水平滚动条。

silverlight 控件的宽度和高度使得我应该得到一个垂直滚动条(我这样做)并且没有水平滚动条。

根据本文http://forums.silverlight.net/forums/p/26996/442817.aspx 中提出的讨论,我们有一个 BrowserScrollHelper 类,用于将 silverlight 控件的大小传输到 PageLoad 和 PageResize 上包含的 HTML 元素。

如果我随后最大化/恢复浏览器窗口,水平滚动条就会消失。似乎无法确定水平滚动条的初始需求状态的只是初始页面加载。

我知道我可以使用 CSS 属性 overflow-x: hidden 来删除滚动条,但这只是掩盖了问题。此外,目前应用程序不需要水平滚动,但我不能保证总是这样。

需要注意的限制。 IE8 是首选浏览器,屏幕分辨率锁定在 1024x768。

【问题讨论】:

    标签: silverlight-3.0 internet-explorer-8


    【解决方案1】:

    我看到浏览器 (IE 8) 随机生成了额外的显示片段,但无法追踪到它。

    特别是屏幕底部高 8 像素的条带导致出现垂直滚动条(尽管 SL 对象处于 100% 且不存在其他元素)。

    最后我将溢出属性改为隐藏。在任何 CSS 浏览器(即任何运行 SL 的)中使用该隐藏选项是完全有效的,所以不要太担心它是“坏的”。

    不过,我也会对任何其他有助于追踪这些故障的实际原因的答案感兴趣。

    【讨论】:

    • 这个答案并不完全是问题的答案,但它是我正在寻找的答案。 IE9 显示垂直滚动条,但其他浏览器显示,IE9 在兼容性视图中也没有。谢谢!
    【解决方案2】:

    设法弄清楚滚动条发生了什么。

    BrowserScrollHelper 中用于将 silverlight 控件的大小传回浏览器的代码正在使用以下代码:

         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( ) );
    

    虽然这段代码 sn-p 在表面上看起来不错,但它只是完成了部分工作。关键是要意识到设置高度可能会影响宽度,反之亦然,而且我们只在应用程序启动时运行过这段代码。

    解决方案是遵循以下任一模式:

    设置高度、设置宽度、设置高度

    设置宽度、设置高度、设置宽度

    这确保了通过代码的单次传递将正确地将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( ) );
    

    在我们的例子中,最终用户很可能会启动最大化的浏览器,并在整个会话期间将其保留在该配置中,并且不执行任何浏览器窗口大小的调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-06
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      相关资源
      最近更新 更多