如何在Windows Phone 7系列上获取屏幕尺寸?

18

你有那种手机?哇——我不知道它们已经可以供任何人开发了。 - Onorio Catenacci
不,只有模拟器 :( - Igor Zevaka
5个回答

66

我使用这个:

this.ScreenWidth = System.Windows.Application.Current.Host.Content.ActualWidth;
this.ScreenHeight = System.Windows.Application.Current.Host.Content.ActualHeight;

有很多种方法可以实现一个应用程序。如果是针对XAML的,你可以绑定到LayoutRoot的属性。

Height="{Binding ElementName=LayoutRoot,Path=ActualHeight}"

2
这是更好的答案。正如Quetzlcoatl所指出的,被接受的答案存在问题。 - jeffa00
这个答案更好。使用这种方法,您还可以在构造函数中获取屏幕尺寸。使用被接受的答案时,我遇到了空引用异常。 - Daan

14

看起来,Application.Current.RootVisual.RenderSize 可以提供您所需的信息。


虽然 Windows Phone 7 会有两种分辨率(480×800 和 320×480),但它们的纵横比并不完全相同,这是我猜测问题产生的原因,这一点很值得注意。 - RoguePlanetoid
7
如果你想尝试这样做,请查看Luke Puplett的下面的答案。RootVisual.RenderSize不能给你完全想要的结果。 - jeffa00

8

我目前还不能进行点赞或反对(实际上,现在我可以并且已经这样做了),但我想指出,“Luke Puplett”的答案包括“Application.Current.Host.Content”是正确的,而不是“Andréas Saudemont”的建议使用“RenderSize”。

我将使用在MSDN教程或示例应用程序中常用的名称。

我认为Host.Current更加适当,因为在应用程序的开始阶段,特别是在WP7上(我不知道在PC上的“普通”SL3 / SL4是如何的) - 也就是说,在第一个页面的构造函数中 - RenderSize属性尚未正确设置,因为应用程序的“RootVisual”正在构建,尚未在“App.xaml.cs”中分配。至少在那一点上,RenderSize = Size {0,0}。

另一方面,如果只有应用程序正确启动,Host.Content就会被设置为某个手机框架,该框架具有正确的全屏大小并旋转到实际屏幕位置。我猜在开始时它是起始闪屏(从JPG文件中为空白或静态的)。


4

如果你想在XNA游戏中访问显示器尺寸,请使用以下代码:

graphics.GraphicsDevice.DisplayMode.Width

并且

graphics.GraphicsDevice.DisplayMode.Height

graphics是当前游戏的GraphicDeviceManager!

(该句已翻译,无需再次翻译)

1

整个屏幕:

(App.Current.RootVisual as FrameworkElement).ActualHeight
(App.Current.RootVisual as FrameworkElement).ActualWidth

当前页面:

如果您想知道可见大小(考虑到AppBar/SystemTray),那么只需向页面请求即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接