Как определить поворот экрана планшетного ПК в полноэкранном приложении Silverlight? - PullRequest
3 голосов
/ 25 мая 2011

Я работаю над приложением Silverlight 4 вне браузера (OOB) на планшетном ПК с Windows 7. Большую часть времени программа работает в полноэкранном режиме. Однако, если пользователь поворачивает планшет, приложение поворачивается и остается в полноэкранном режиме, но масштабируется с учетом предыдущей ориентации экрана. Если вывести приложение из полноэкранного режима и вернуть его в полноэкранный режим, все будет правильно изменено. Можно ли как-то определить, когда экран вращается? До сих пор я пробовал события приложения Resize, LayoutChanged и FullScreenChanged, и у меня есть обработчик для события SizeChanged главной страницы. Ничто из этого не срабатывает при повороте приложения в полноэкранном режиме.

По предложению Джоша Эйнштейна я попытался опросить ActualWidth / Height приложения по таймеру. Похоже, что после поворота значения ActualWidth / Height, возвращаемые из плагина Silverlight, являются предварительно повернутыми значениями. Только если вынуть его из полноэкранного режима и вернуть обратно в полноэкранный режим, изменится разрешение плагина. Взлом HtmlPage.Eval не работал, так как я OOB.

WP7-версия Silverlight имеет событие OnOrientationChanged, которое, по-видимому, недоступно в настольной версии. У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 26 мая 2011

Отличный вопрос, но, насколько я могу судить, это кажется невозможным.Я попытался изменить разрешение экрана на виртуальной машине (изменение ориентации - это просто изменение разрешения экрана, которое приводит к тому, что ширина больше высоты или наоборот), и не смог вызвать какие-либо события макета.

Кажется, проблемабудь то, что сам плагин Silverlight не изменен.С расширенным приложением вне браузера вы, вероятно, могли бы использовать COM-взаимодействие с WMI, чтобы получить реальное разрешение экрана, но это отчасти хакерство.Если это приложение в браузере, вы можете использовать HTML DOM.В обоих случаях вам, вероятно, придется опросить текущее разрешение экрана вместо того, чтобы получать уведомление через событие.

Mister Goodcat написал сообщение в блоге о том, как получить эту информациюв обоих сценариях.

Я бы тоже подал в виде ошибки Silverlight.

...