2013-06-10 4 views
1

J'ai une application qui utilise un LongListSelector pour afficher une liste d'éléments, en bas de la page, j'ai un TextBox. Lorsque le TextBox est tapé, le SIP s'affiche lui-même. À ce stade, je suis incapable de faire défiler vers le haut de la LLS.Affichage des éléments les plus importants dans un LongListSelector sur WP8 lorsque SIP est ouvert

Exemple de code:

XAML:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 

     <Grid Grid.Row="0"> 
      <phone:LongListSelector x:Name="TheList"> 
       <phone:LongListSelector.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding}" 
            Style="{StaticResource PhoneTextLargeStyle}"/> 
        </DataTemplate> 
       </phone:LongListSelector.ItemTemplate> 
      </phone:LongListSelector> 
     </Grid> 

     <Grid Grid.Row="1"> 
      <TextBox /> 
     </Grid> 
    </Grid> 

C#:

public MainPage() 
    { 
     InitializeComponent(); 

     Loaded += (sender, args) => 
     { 
      var list = new List<string>(); 
      for (var i = 0; i < 30; i++) 
      { 
       list.Add("This is string number " + i); 
      } 

      TheList.ItemsSource = list; 
     }; 
    } 

C'est autant que je peux voir, je peux tirer vers le bas au numéro de chaîne 5, mais peut » t voir plus haut: LongListSelector Problem

Quelqu'un a-t-il des idées?

+0

Vous trouverez peut-être la suivante utile: http://sorokoletov.com/2011/08/windows-phone-70-handling-text-entry-screens/ –

Répondre

1

Le ScrollViewer ne prend pas en compte le protocole SIP, de sorte que son expérience de défilement est la même que lorsque le protocole SIP n'est pas visible (ce qui explique pourquoi le sommet ne peut pas être atteint). Une solution de contournement consiste à ajouter une marge en haut de la LongListSelector (ou le bas si votre zone de texte est en haut), lorsque le SIP est affiché.

Comme il n'y a pas d'événement pour le protocole SIP, vous pouvez gérer les événements GotFocus et LostFocus de la zone de texte. (La valeur 180 a été obtenue par essais et erreurs)

private void TextBox_GotFocus(object sender, RoutedEventArgs e) 
{ 
    TheList.Margin = new Thickness(0,180,0,0); 
} 

private void TextBox_LostFocus(object sender, RoutedEventArgs e) 
{ 
    TheList.Margin = new Thickness(); 
} 
+0

Intéressant, j'ai essayé avec une marge de 160, n'a pas fait une différence notable, juste essayé avec une marge supérieure de 350 et maintenant il fait une différence. Merci de m'avoir incité à continuer d'essayer avec ça :) – ScottIsAFool

+0

Vous êtes les bienvenus :) – keyboardP

Questions connexes