2010-10-14 14 views
4

Bonjour les autres développeurs! Je travaille sur une application Windows Phone 7 et je n'arrive pas à comprendre ce que je crois être un problème simple pour les plus expérimentés. Dites que j'ai une mise en page composée de deux éléments: un ListBox (rempli d'une abondance d'éléments) et un TextBlock (fournissant à l'utilisateur quelques instructions de base). Je veux que celles-ci soient superposées lorsque l'appareil est en orientation Portrait et que je souhaite que celles-ci soient côte à côte lorsque l'orientation de l'appareil passe en mode Paysage.Windows Phone 7 applications - Changement d'orientation

Pour l'orientation Portrait J'utilise un gestionnaire de mise en page de la grille, car il me permet de définir les hauteurs des lignes comme si ... la ligne 0 Height="2*", ligne 1 Height="*"

Listbox se trouve dans la ligne 0, TextBlock en ligne 1. Maintenant, ce qui serait vraiment intéressant est de simplement changer les RowDefinition en ColumnDefinition et de réaffecter la liste/bloc de texte aux colonnes de la grille au lieu des lignes pour quand l'appareil passe en mode paysage.

Mais c'est juste mon idée. Je ne sais pas comment le faire avec élégance. Peut-être qu'il y a une meilleure approche à cela? Ou peut-être que c'est l'approche correcte et il y a une méthode construite pour exactement ce but?

Nous vous remercions de vos suggestions!

+0

Avez-vous essayé cette approche? Ça a marché? Y avait-il des problèmes? –

Répondre

3

Comment parler pour la configuration portrait par défaut: -

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="2*" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefintions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <ListBox x:Name="ItemList" Grid.ColumnSpan="2" /> 
    <TextBlock x:Name="Instructions" Grid.Row="1" Grid.ColumnSpan="2"> 
     Content 
    </TextBlock> 

Ensuite, dans l'utilisation de l'événement OrientationChanged: -

if ((e.Orientation & PageOrientation.Portrait) == PageOrientation.Portrait) 
{ 
    Grid.SetRow(ItemList, 0); 
    Grid.SetRowSpan(ItemList, 1); 
    Grid.SetColumn(ItemList, 0); 
    Grid.SetColumnSpan(ItemList, 2); 

    Grid.SetRow(Instructions, 1); 
    Grid.SetRowSpan(Instructions, 1); 
    Grid.SetColumn(Instructions, 0); 
    Grid.SetColumnSpan(Instructions, 2); 
} 
else 
{ 
    Grid.SetRow(ItemList, 0); 
    Grid.SetRowSpan(ItemList, 2); 
    Grid.SetColumn(ItemList, 0); 
    Grid.SetColumnSpan(ItemList, 1); 

    Grid.SetRow(Instructions, 0); 
    Grid.SetRowSpan(Instructions, 2); 
    Grid.SetColumn(Instructions, 1); 
    Grid.SetColumnSpan(Instructions, 1); 
} 
+0

Assurez-vous également de définir l'orientation lors de la navigation et/ou du chargement de la page car vous ne pouvez pas être sûr de l'orientation du périphérique lors de la navigation (ou du retour à) cette page. –

+1

@Matt: Il vaut mieux placer le code ci-dessus dans une fonction et appeler depuis les deux emplacements de code. – AnthonyWJones

+0

@Peter: Je ne peux pas expliquer ce comportement J'ai testé mon code sur l'émulateur et ça marche bien. – AnthonyWJones

2

Pour l'orientation, Visual Manager État fonctionne le mieux.

  1. Dans Mélange, définissez deux états, nommez-les "port" et "atterrissage".
  2. Placez le panneau de configuration "Périphérique" dans l'espace de travail Assemblage.
  3. Enregistrez les mises en page en changeant d'orientation et en concevant chaque mise en page en conséquence.
  4. En cas de changement d'orientation, utilisez le code suivant:

code:

private void PhoneApplicationPage_OrientationChanged 
(object sender, OrientationChangedEventArgs e) 
{ 
    VisualStateManager 
    .GoToState(this, e.Orientation.ToString().Substring(0, 4), true); 
} 
+0

Cela semble simple, mais nous n'utilisons pas de mélange ... –

+2

Blend est un outil génial pour WP7 dev, et je recommande fortement vous devriez au moins vérifier :) Vous devriez toujours être capable de faire ce qui est décrit dans cette réponse sans mélange, cependant. Jetez un oeil à ce fil pour un début - http://forums.silverlight.net/forums/p/30033/98891.aspx –

+0

Je ne crois pas que l'utilisation de la fonction Enregistrer dans Blend vous permettra de changer la ligne et tailles de colonnes si elles doivent changer. –