Удалось выяснить, что происходит с полосами прокрутки.
Код в нашем 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( ) );
В нашем случае конечный пользователь, скорее всего, развернет браузер в развернутом виде и оставит его в этой конфигурации для всего сеанса, а не изменит размеры окна браузера.