2010-08-12 2 views
8

현재 디스플레이 장치에 따라 절대 크기 조정이 필요한 수많은 WP7 응용 프로그램을 작성하고 있습니다. 이는 앱 크기가 656 (w) x 480 (h) 일 필요가 있다는 것을 의미합니다. 이는 shell:SystemTray.IsVisible="True"shell:ApplicationBar IsVisible="True" 모두 인 WP7에 적합합니다. 가능한 800 x 480에서 두 개의 막대가 모두 144를 사용하므로 앞에서 잘 쓴다.WP7 Silverlight App Scalability Scalability

PC에서는 720x540과 같은 크기의 큰 버전을 사용합니다.

그러나 iPhone-> iPad가 MSFT (태블릿 사업에 다시 투자하는 것뿐만 아니라)에 대한 수입 흐름의 가능성을 나타내는 것이라면 필자는 태블릿 PC를 볼 것이라고 가정합니다. WP7 OS를 위해 곧 출시 될 것입니다.

또한 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

, 태블릿 (슬레이트) 스타일 장치 (안 윈도우 폰 7) 윈도우 7의 전체 버전을 실행하지만 것 슬레이트 더 나은/간단/편리하게 사용할 수 상단에 addtional 소프트웨어 층 문맥.

WP7 장치는 HVGA 화면 (480x320)으로 출시되며 Microsoft는 다른 크기가 향후에 없을 것이라고 명시 적으로 명시했습니다. (그들은 여러 화면 크기를 지원하려는 교훈을 배웠습니다.) 즉, 약 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); 

를 장치가 회전하는 경우는 여전히에서 크기를 제공합니다 세로 방향.

양해 바랍니다. 이것은 에뮬레이터 &의 테스트 결과에 따라 크기가 다른 여러 장치에서 테스트되지 않았습니다.

관련 문제