Как определить поворот экрана планшетного ПК в полноэкранном приложении Silverlight?

#silverlight #silverlight-4.0 #windows-7 #tablet-pc

#silverlight #silverlight-4.0 #windows-7 #планшетный ПК

Вопрос:

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

По предложению Джоша Эйнштейна я попытался выполнить опрос фактической ширины / высоты приложения по таймеру. Похоже, что после поворота фактические значения ширины / высоты, возвращаемые подключаемым модулем Silverlight, являются предварительно повернутыми значениями. Только удаление его из полноэкранного режима и возврат в полноэкранный режим изменит разрешение подключаемого модуля. HTMLСТРАНИЦА.Взлом Eval не сработал, поскольку я OOB.

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

Ответ №1:

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

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

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

Я бы тоже зарегистрировал это как ошибку Silverlight.

Комментарии:

1. Спасибо, это дало краткий момент надежды. К сожалению, похоже, что подключаемый модуль Silverlight неправильно сообщает о ActialWidth / Height после поворота экрана. Смотрите мой обновленный вопрос для получения более подробной информации.

2. Я знаю, в своем ответе я отметил, что после поворота размер плагина Silverlight не изменяется. ActualHeight и ActualWidth не дают правильных значений. Вам нужно будет обратиться к WMI или HTML DOM для значений, для которых требуется либо повышенное значение вне браузера, либо приложение в браузере.

3. Казалось, что проблема с изменением размера была знакомой. Я потратил большую часть своего времени на сообщение, на которое вы ссылались, и просто забыл о вашем первоначальном сообщении. Извините за это.