我正在使用Windows 7平板电脑上的Silverlight 4浏览器(OOB)应用程序。大多数情况下,程序处于全屏模式。但是,如果用户旋转平板电脑,应用程序将旋转并保持全屏,但会缩放以适应之前的屏幕方向。将应用程序从全屏中取出并将其重新放回全屏,可以正确地重新扫描所有内容。屏幕旋转时有什么方法可以检测到吗?到目前为止,我已经尝试了应用程序的Resize,LayoutChanged和FullScreenChanged事件,并为主页面的SizeChanged事件设置了处理程序。当应用程序以全屏模式旋转时,这些都不会被触发。
根据Josh Einstein的建议,我尝试在计时器上轮询应用程序的ActualWidth / Height。看起来在旋转之后,Silverlight插件返回的ActualWidth / Height值是预先旋转的值。只有将其从全屏中取出并将其全屏放回才会改变插件的分辨率。由于我是OOB,HtmlPage.Eval hack无法正常工作。
Silverlight的WP7版本具有OnOrientationChanged事件,该事件似乎在桌面版本中不可用。有人有什么想法吗?
答案 0 :(得分:1)
很好的问题但据我所知,似乎不可能。我尝试在虚拟机中更改屏幕分辨率(方向更改实际上只是屏幕分辨率更改导致宽度大于高度,反之亦然)并且无法触发任何布局事件。
问题似乎是Silverlight插件本身没有调整大小。使用升级的浏览器外应用程序,您可以使用COM与WMI的互操作来获得实际的屏幕分辨率,但它有点像hacky。如果它是浏览器内应用程序,您可以使用HTML DOM。在这两种情况下,您可能必须轮询当前的屏幕分辨率,而不是通过事件通知。
Mister Goodcat写了一篇关于如何在两种情况下获取此信息的博客文章。
我也会将其归档为Silverlight错误。