2010-08-12 2 views
8

Sto scrivendo un numero di app WP7 in questo momento che richiedono il ridimensionamento assoluto, a seconda del dispositivo di visualizzazione. Ciò significa che la dimensione dell'app deve essere 656 (w) per 480 (h), che è perfetta per WP7 con entrambi shell:SystemTray.IsVisible="True" e shell:ApplicationBar IsVisible="True". Da un possibile 800 x 480, entrambe le barre usate prendono 144, quindi sono bravo su quel fronte.Scalabilità scalabilità di app Silverlight WP7

Su un PC, utilizzerei una versione più grande di tale dimensione, ad esempio 720x540.

Tuttavia, se iPhone-> iPad è un'indicazione di possibili flussi di entrate per MSFT (oltre a reinvestire Ballmer nel business dei tablet), supporrò che vedessimo un tablet L'unità di dimensioni ridotte esce abbastanza presto per il sistema operativo WP7.

Inoltre, potrebbe essere presente una risoluzione 400x240 di WP7.

Quello che mi piacerebbe è che le mie app siano immediatamente disponibili per dispositivi di dimensioni diverse, basate su quelle dimensioni sopra (656 (w) per 480 (h) o una versione ridimensionata di quella) - piuttosto che dover basta modificare un singolo set di valori per rilasciare nuovamente un'app. Nota: Non uso uno <Grid/> o <StackPanel/> - e non posso. Ogni singola cosa nell'app è posizionata in modo assoluto e questo è apposta.

Quindi la domanda qui è - c'è qualche valore che posso leggere sulla dimensione della risoluzione dello schermo del dispositivo su cui è in esecuzione la mia app? Ho esaminato lo reference, ma non ho trovato nulla di simile.

risposta

7

è possibile determinare le dimensioni di visualizzazione disponibili con: -

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

Questi rimangono gli stessi, nonostante l'orientamento.Utilizzare le dimensioni dello RootVisual probabilmente funzionerebbe altrettanto bene, ma se per ragioni di bizare il RootVisual ha una dimensione fissa, allora non funzionerà.

Le proprietà ActualWidth e ActualHeight sono progettate specificamente per informare l'applicazione della dimensione del viewport fornita dal dispositivo host.

1

Ciò è possibile utilizzando una tela delle dimensioni per cui si desidera lavorare e quindi applicare uno zoom modificando il valore di ScaleX e ScaleY. Il modo migliore per farlo è utilizzare l'associazione dati ad una proprietà calcolata in fase di esecuzione. Ma tieni presente che probabilmente manterrai il rapporto corretto in modo da ridimensionare la X e Y della stessa quantità. Quando il valore è inferiore, 1 diminuirà e si ridurrà quando il valore sarà maggiore di 1. Inoltre, tenere presente che lo stuf basato su pixel diventerà più pixelato.

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

Da quello che ho sentito, dispositivi tablet (ardesia) stile verrà eseguito una versione completa di Windows 7 (non Windows Phone 7), ma con uno strato di software supplementare sulla parte superiore per una migliore/più semplice/uso più facile in ardesia contesto.

I dispositivi WP7 usciranno con schermi HVGA (480x320) e Microsoft ha dichiarato esplicitamente che non ci saranno altre taglie in futuro. (Hanno imparato la lezione di provare a supportare più dimensioni dello schermo.) Ciò significa che non dovrai preoccuparti di 400x240.

In risposta alla tua domanda effettiva:
È possibile ottenere la dimensione dello schermo accedendo alla RenderSize del RootVisual, in questo modo:

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

Se il dispositivo viene ruotato dà ancora le dimensioni da un orientamento verticale.

Nota. Questo è basato sui miei test nell'emulatore & non testato su dispositivi diversi con schermi di dimensioni diverse.