3

我正在 Windows 7 平板电脑上开发 Silverlight 4 out of browser (OOB) 应用程序。大多数时候,程序处于全屏模式。但是,如果用户旋转平板电脑,应用程序会旋转并保持全屏状态,但会针对之前的屏幕方向进行缩放。将应用程序退出全屏并将其放回全屏可以正确调整所有内容。有什么方法可以检测到屏幕何时旋转?到目前为止,我已经尝试了应用程序的 Resize、LayoutChanged 和 FullScreenChanged 事件,并为主页的 SizeChanged 事件提供了一个处理程序。当应用程序在全屏模式下旋转时,这些都不会被触发。

根据 Josh Einstein 的建议,我尝试在计时器上轮询应用程序的实际宽度/高度。看起来旋转后,Silverlight 插件返回的 ActualWidth/Height 值是预先旋转的值。只有将其退出全屏并重新全屏才会更改插件的分辨率。HtmlPage.Eval hack 没有工作,因为我是 OOB。

Silverlight的WP7版本有OnOrientationChanged事件,桌面版好像没有。有人有想法么?

4

1 回答 1

1

很好的问题,但据我所知,这似乎是不可能的。我尝试在虚拟机中更改屏幕分辨率(方向更改实际上只是屏幕分辨率更改导致宽度大于高度,反之亦然)并且无法触发任何布局事件。

问题似乎是 Silverlight 插件本身没有调整大小。使用提升的浏览器外应用程序,您大概可以使用 COM 与 WMI 互操作来获得实际的屏幕分辨率,但它有点 hacky。如果它是浏览器内的应用程序,您可以使用 HTML DOM。在这两种情况下,您可能都必须轮询当前的屏幕分辨率,而不是通过事件获得通知。

Goodcat 先生写了一篇关于如何在这两种情况下获取此信息的博客文章。

我也会将其归档为 Silverlight 错误。

于 2011-05-26T13:37:43.247 回答