2010-08-12 127 views
8

我正在編寫大量的WP7應用程序,需要絕對大小,具體取決於顯示設備。這意味着應用程序大小需要爲656(w)x 480(h),這對於WP7同時適用於shell:SystemTray.IsVisible="True"shell:ApplicationBar IsVisible="True"。從可能的800×480,這兩個酒吧使用144,所以我在這方面很好。WP7 Silverlight應用程序可伸縮性可擴展性

在PC上,我會使用該尺寸需求的較大版本,如720x540。然而,如果iPhone-> iPad是MSFT可能的收入來源(以及鮑爾默重新投資平板電腦業務)的任何跡象,那麼我將假設我們會看到一款平板電腦 - 大小的單元很快就會出來用於WP7操作系統。

此外,WP7可能有400x240分辨率出來。

我想要的是,根據上述尺寸(656(w)x 480(h)或縮放版本),我的應用立即可用於不同尺寸的設備 - 而不必只需更改一組值即可重新發布應用。 注意:我不使用<Grid/><StackPanel/> - 我不能。應用程序中的每件事都是絕對定位的,這是有目的的。

所以這裏的問題是 - 有一些價值,我可以閱讀關於我的應用程序正在運行的設備的屏幕分辨率大小?我查看了reference,但找不到像這樣的東西。

回答

7

您可以確定可用的顯示器尺寸: -

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

這些保持不變,儘管方向。使用RootVisual的尺寸可能會起作用,但如果因爲bizare原因RootVisual具有固定大小,那麼這將不起作用。

上面的ActualWidthActualHeight屬性專門用於通知應用程序主機設備提供的視口大小。

1

這可以通過使用您喜歡的尺寸的Canvas來實現,然後通過更改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> 
3

從我聽到的,平板電腦(平板)風格的設備將運行完整版本的Windows 7(不是Windows Phone 7的),但在頂部在石板更好/更簡單/易於使用addtional軟件層上下文。

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

如果設備旋轉它仍然給從尺寸肖像方向。

請注意。這是基於我在模擬器&中的測試沒有在具有不同尺寸屏幕的不同設備上測試。