Нежелательная горизонтальная полоса прокрутки браузера отображается с использованием IE8 - PullRequest
0 голосов
/ 04 октября 2010

У меня есть ситуация с нашим приложением silverlight 3, когда при начальной загрузке главной страницы приложения отображается горизонтальная полоса прокрутки в браузерах.

Ширина и высота элемента управления silverlight таковы, что я должен получить вертикальную полосу прокрутки (что я и делаю) и никакой горизонтальной полосы прокрутки.

У нас есть класс BrowserScrollHelper, который используется для переноса размера элементов управления silverlight в содержащий HTML-элемент в PageLoad и PageResize, как обсуждалось в этом посте http://forums.silverlight.net/forums/p/26996/442817.aspx.

Если затем развернуть / восстановить окно браузера, горизонтальная полоса прокрутки исчезнет. Кажется, что только начальная загрузка страницы не может определить начальное состояние требования горизонтальной полосы прокрутки.

Я знаю, что могу использовать свойство CSS overflow-x: hidden, чтобы удалить полосу прокрутки, но это только маскирует проблему. Кроме того, в данный момент приложение не нуждается в горизонтальной прокрутке, но я не могу гарантировать, что так будет всегда.

Ограничения, которые следует отметить. IE8 - браузер по выбору, разрешение экрана заблокировано в 1024x768.

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Я видел случайные дополнительные фрагменты отображения, генерируемые браузером (IE 8), и не смог отследить их.

В частности, полоса высотой 8 пикселей внизу экрана вызывала появление вертикальной полосы прокрутки (хотя объект SL был на уровне 100%, а другие элементы отсутствовали).

В конце я изменил свойство переполнения на скрытое. Вполне допустимо использовать эту скрытую опцию в любом браузере CSS (то есть во всем, где работает SL), поэтому не стоит слишком беспокоиться о том, что он «плохой». Однако мне также будут интересны любые другие ответы, которые помогут отследить истинную причину этих глюков.

0 голосов
/ 08 октября 2010

Удалось выяснить, что происходит с полосами прокрутки.

Код в нашем 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( ) );

Хотя этот фрагмент кода выглядит нормально, он выполнял только часть работы. Ключ был в том, чтобы понять, что установка высоты может повлиять на ширину, и наоборот, и мы запускали этот код только один раз при запуске приложения.

Резолюция должна была следовать шаблону:

Задать высоту, Задать ширину, Задать высоту

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

В нашем случае конечный пользователь, скорее всего, развернет браузер в развернутом виде и оставит его в этой конфигурации для всего сеанса, а не изменит размеры окна браузера.

...