2010-08-12 14 views
8

estoy escribiendo una serie de aplicaciones de WP7 en este momento que la necesidad absoluta de tamaño, dependiendo de dispositivo de visualización. Esto significa que el tamaño de la aplicación debe ser de 656 (w) por 480 (h), lo que es perfecto para WP7 con shell:SystemTray.IsVisible="True" y shell:ApplicationBar IsVisible="True". Desde un posible 800 x 480, ambas barras utilizadas toman 144, así que estoy bien en ese frente.WP7 Silverlight App Escalabilidad La escalabilidad

En un PC, que haría uso de una versión más grande de esa necesidad tamaño, como 720x540.

Sin embargo, si iPhone-> iPad es una indicación de posibles flujos de ingresos para MSFT (así como de la reinversión de Ballmer en el negocio de las tabletas), voy a hacer la suposición de que veremos una tableta- la unidad de tamaño sale lo suficientemente pronto para el sistema operativo WP7.

Además, puede haber una resolución de 400x240 de WP7 a salir.

Lo que me gustaría es que mis aplicaciones estén disponibles de inmediato para dispositivos de diferentes tamaños, en función de las dimensiones anteriores (656 (w) por 480 (h), o una versión escalada de eso), en lugar de tener que simplemente cambie un solo conjunto de valores para volver a lanzar una aplicación. Nota: No usar un <Grid/> o <StackPanel/> - y no puedo. Cada cosa en la aplicación está absolutamente posicionada y esto es a propósito.

Así que la pregunta aquí es - ¿Hay algún valor que pueda leer sobre el tamaño de resolución de pantalla del dispositivo en el que se ejecuta mi aplicación? Revisé el reference, pero no pude encontrar nada como esto.

Respuesta

7

se puede determinar el tamaño de la pantalla disponible con: -

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

Estos siguen siendo los mismos a pesar de la orientación.El uso de las dimensiones de RootVisual probablemente también funcione, pero si por alguna razón RootVisual tiene un tamaño fijo, entonces eso no funcionará.

Las propiedades anteriores ActualWidth y ActualHeight están diseñadas específicamente para informar a la aplicación del tamaño de la ventana gráfica que está proporcionando el dispositivo host.

1

Eso es posible mediante el uso de un lienzo del tamaño que desee trabajar y luego aplicar un zoom cambiando el valor de ScaleX y ScaleY. La mejor forma de hacerlo es mediante el uso de un enlace de datos a una propiedad que se calcula en tiempo de ejecución. Pero tenga en cuenta que probablemente mantendrá la proporción correcta para escalar el X y el Y en la misma cantidad. Cuando el valor es más pequeño que 1, se reducirá y se ampliará cuando el valor sea mayor que 1. Y también tenga en cuenta que el objeto basado en píxeles se pixelará más.

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

Por lo que sé, los dispositivos de estilo (pizarra), la tableta se ejecutará una versión completa de Windows 7 (no Windows Phone 7), pero con una capa de software de $ adicionales en la parte superior para un uso mejor/más simple/más fácil en la pizarra contexto.

dispositivos WP7 va a salir con pantallas HVGA (480x320) y Microsoft han declarado explícitamente que no habrá ningún otros tamaños en el futuro. (Han aprendido la lección de tratar de admitir múltiples tamaños de pantalla.) Esto significa que no tendrá que preocuparse por 400x240.

En respuesta a su pregunta real:
Puede obtener el tamaño de la pantalla accediendo a la RenderSize del RootVisual, así:

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

Si el dispositivo se gira todavía da las dimensiones de una orientación vertical.

Tenga en cuenta. Esto se basa en mis pruebas en el emulador & no probado en diferentes dispositivos con pantallas de diferentes tamaños.