Как определить поворот экрана планшетного ПК в полноэкранном приложении Silverlight?
Я работаю над приложением Silverlight 4 вне браузера (OOB) на планшетном ПК с Windows 7. Большую часть времени программа работает в полноэкранном режиме. Однако если пользователь поворачивает планшет, приложение поворачивается и остается в полноэкранном режиме, но масштабируется с учетом предыдущей ориентации экрана. Если вывести приложение из полноэкранного режима и вернуть его в полноэкранный режим, все будет правильно изменено. Есть ли способ определить, когда экран вращается? До сих пор я пробовал события приложения Resize, LayoutChanged и FullScreenChanged, и у меня есть обработчик для события SizeChanged главной страницы. Ничто из этого не срабатывает, когда приложение поворачивается в полноэкранном режиме.
По предложению Джоша Эйнштейна я попытался опросить ActualWidth/Height приложения по таймеру. Похоже, что после поворота значения ActualWidth/Height, возвращаемые плагином Silverlight, являются предварительно повернутыми значениями. Только если вынуть его из полноэкранного режима и вернуть обратно в полноэкранный режим, изменится разрешение плагина. Взлом HtmlPage.Eval не работал, так как я OOB.
WP7-версия Silverlight имеет событие OnOrientationChanged, которое, по-видимому, недоступно в настольной версии. У кого-нибудь есть идеи?
1 ответ
Отличный вопрос, но, насколько я могу судить, это кажется невозможным. Я попытался изменить разрешение экрана на виртуальной машине (изменение ориентации - это просто изменение разрешения экрана, которое приводит к тому, что ширина больше высоты или наоборот), и не смог вызвать какие-либо события макета.
Проблема заключается в том, что размер самого плагина Silverlight не изменился. С расширенным приложением вне браузера вы, вероятно, могли бы использовать COM-взаимодействие с WMI, чтобы получить реальное разрешение экрана, но это довольно странно. Если это приложение в браузере, вы можете использовать HTML DOM. В обоих случаях вам, вероятно, придется запрашивать текущее разрешение экрана вместо того, чтобы получать уведомление через событие.
Мистер Гудкат написал сообщение в блоге о том, как получить эту информацию в обоих сценариях.
Я бы подал это как ошибку Silverlight.