代码之家  ›  专栏  ›  技术社区  ›  Todd Main

WP7 Silverlight应用程序可扩展性

  •  8
  • Todd Main  · 技术社区  · 14 年前

    我现在正在编写一些WP7应用程序,它们需要根据显示设备进行绝对大小调整。这意味着应用程序的大小需要是656(w)x 480(h),这对于WP7两者都是完美的 shell:SystemTray.IsVisible="True" shell:ApplicationBar IsVisible="True" . 从一个可能的800 x 480,这两个酒吧都用了144,所以我在这方面很好。

    在个人电脑上,我会使用那种尺寸的更大版本,比如720x540。

    但是,如果iphone->ipad显示出微软可能的收入来源(以及鲍尔默对平板电脑业务的重新投资),我会假设我们很快就会看到一个平板电脑大小的设备能够满足WP7操作系统的需求。

    另外,可能会出现一个400x240的WP7分辨率。

    我想要的是我的应用程序能够立即提供给不同尺寸的设备,基于以上这些尺寸(656(W)乘以480(H),或者是它的缩放版本),而不是仅仅改变一组值来重新发布一个应用程序。 注释 我不使用 <Grid/> <StackPanel/> -我不能。应用程序中的每一件事都是绝对定位的,这是故意的。

    所以这里的问题是- 是否有一些值可以让我了解我的应用程序正在运行的设备的屏幕分辨率大小? 我已经看过了 reference 但是找不到这样的东西。

    3 回复  |  直到 14 年前
        1
  •  7
  •   AnthonyWJones    14 年前

    您可以使用以下命令确定可用的显示大小:

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

    不管方向如何,这些都保持不变。使用 RootVisual 可能也可以,但如果因为Bizare的原因,rootVisual有一个固定的大小,那么它就不会工作。

    这个 ActualWidth ActualHeight 上面的属性专门用于通知应用程序主机设备提供的视区大小。

        2
  •  3
  •   Matt Lacey    14 年前

    据我所知,平板电脑(Slate)风格的设备将运行完整版本的Windows 7(而不是Windows Phone 7),但其顶部有一个附加的软件层,可以在Slate环境中更好/更简单/更容易地使用。

    WP7设备将推出hvga屏幕(480x320),微软已明确表示,未来不会有任何其他尺寸。(他们已经学到了尝试支持多种屏幕尺寸的经验。)这意味着您不必担心400x240。

    回答您的实际问题:
    您可以通过访问 RenderSize RootVisual ,像这样:

    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);
    

    如果旋转设备,它仍然会从纵向给出尺寸。

    请注意。这是基于我在模拟器中的测试,而不是在具有不同大小屏幕的不同设备上测试。

        3
  •  1
  •   Wouter Janssens    14 年前

    这可以通过使用您喜欢的画布大小来实现,然后通过更改scalex和scaley的值来应用缩放。最好的方法是使用数据将其绑定到运行时计算的属性。但要记住,你可能会保持正确的比例,所以按同样的比例缩放x和y。当该值小于1时,它将缩小;当该值大于1时,它将增大。还要记住,基于像素的stuf将变得更像素化。

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