WP7 Silverlight应用的可扩展性问题

6
我正在编写一些WP7应用程序,需要绝对大小,具体取决于显示设备。这意味着应用程序大小需要为656(w)x 480(h),这非常适合带有shell:SystemTray.IsVisible="True"shell:ApplicationBar IsVisible="True"的WP7。从可能的800 x 480中,这两个栏目都需要占用144,所以在这方面我做得很好。
在PC上,我会使用更大的尺寸,例如720x540。
然而,如果iPhone-iPad是MSFT可能的收入来源的任何迹象(以及Ballmer重新投资于平板电脑业务),我将假定我们很快将看到一个适用于WP7 OS的平板电脑大小的单元。
此外,可能会出现400x240分辨率的WP7。
我想要的是,我的应用程序可以立即适用于不同大小的设备,基于上述尺寸(656(w)x 480(h)或缩放版本)-而不是只需更改一组值即可重新发布应用程序。注意:我不使用<Grid/><StackPanel/>-我不能这样做。应用程序中的每件事物都是绝对定位的,这是有意的。
因此,问题在于-是否有一些值可以读取我应用程序正在运行的设备的屏幕分辨率大小?我已经查看了参考文献,但找不到类似的内容。
3个回答

7

您可以使用以下方法确定可用的显示尺寸:

var width = Application.Current.Host.Content.ActualWidth;
var height = Application.Current.Host.Content.ActualHeight;

尽管方向不同,这些保持不变。使用RootVisual的尺寸可能也可以,但如果由于奇怪的原因RootVisual具有固定大小,则无法正常工作。

上述ActualWidthActualHeight属性专门设计用于通知应用程序提供的视口大小由主机设备提供。


3
据我所知,平板电脑(slate)风格的设备将运行完整版的Windows 7(而不是Windows Phone 7),但会在其上添加额外的软件层,以便更好、更简单、更易于在平板电脑上使用。
WP7设备将配备HVGA屏幕(480x320),微软已明确表示未来不会有其他尺寸。(他们已经吸取了支持多种屏幕尺寸的教训。)这意味着您无需担心400x240。
回答您实际的问题:
您可以通过访问RootVisualRenderSize来获取屏幕大小,如下所示:
var size = App.Current.RootVisual.RenderSize;

var msg = string.Format("Height: {0}\r\nWidth: {1}", size.Height, size.Width);

MessageBox.Show(msg, "size", MessageBoxButton.OK);

如果设备旋转,它仍然会给出竖屏方向的尺寸。请注意,这是基于我在模拟器中的测试结果,并未在具有不同屏幕大小的不同设备上进行测试。

1

可以通过使用所需工作大小的画布,然后通过更改ScaleX和ScaleY的值来应用缩放来实现。最好的方法是将其数据绑定到在运行时计算的属性上。但请记住,您可能会保持正确的比例,因此将X和Y按相同的比例缩放。当值小于1时,它将缩小,当值大于1时,它将放大。还要记住,基于像素的东西会变得更加像素化。

<Canvas x:Name="canvas" Background="#FFFFFFFF" Width="656" Height="480">
    <Canvas.RenderTransform>
        <ScaleTransform ScaleX="1" ScaleY="1"/>
    </Canvas.RenderTransform>
    <Button Content="OK"/>
</Canvas>

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