2013-07-10 4 views
8

Ich habe zwei Probleme mit dem Code folgt, während ich eine einfache Chat-App mache. Der Code zeigt einen Textblock am oberen Rand der Seite und zwei Textbox-Stapel unten an. Plus eine Listbox, die automatisch Höhe wird, um die verbleibende Lücke zu füllen.Windows Phone-Elemente blättern, während SIP-Tastatur erscheint

<Grid x:Name="LayoutRoot" Background="Transparent"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="1*"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Rectangle Height="1" Fill="White" VerticalAlignment="Top"/> 
     <TextBlock Text="Hello World!" Grid.Row="0" FontSize="36"/> 
     <Listbox Grid.Row="1"/> 
     <TextBox Grid.Row="2"/> 
     <TextBox Grid.Row="3"/> 
</Grid> 
  1. Wenn ich auf einer der Top-area per klicken, wird der SIP-Tastatur sichtbar und für alle Inhalte auf der Seite nach oben gedrückt wird. Das Hauptproblem hier ist, dass der oberste Textblock verschwindet und über der Oberseite verschwindet. Wie kann ich es oben und nicht bewegen, während die SIP-Tastatur angezeigt wird?

  2. Wenn die unterste Textbox den Fokus hat, wird die SIP-Tastatur angezeigt und der gesamte Inhalt wird nach oben verschoben. In diesem Fall wird die Tastatur nur in diese Textbox passen und sie festhalten. Wenn das andere Textfeld jedoch Fokus hat, wird die Tastatur eine Lücke zwischen ihnen bilden. Wie kann ich die Tastatur so verhalten, wie sie es tut, wenn die niedrigste fokussiert ist?

+0

mögliche Duplikate von [Windows Phone 7 Tastaturgröße] (http://stackoverflow.com/questions/4399153/windows-phone-7-keyboard-size) – SandRock

Antwort

1

Wenn die Tastatur Pops und unpops, ein TranslateTransform läuft auf dem PhoneApplicationFrame, den ganzen Bildschirm nach oben und unten zu übersetzen.

Basierend auf this article sollten Sie in der Lage sein, den Wert der Übersetzung zu erhalten. Wie Sie sehen können, verschiebt eine Animation die Y Eigenschaft von Null auf einen bestimmten negativen Wert (basierend auf dem Steuerelement, auf das Sie sich konzentriert haben).

Option 1: Ich konnte keine Abstiegsmethode für diesen Wert schreiben, aber Sie sollten die Größe der Steuerelemente so anpassen können, dass sie in den Rest des Bildschirms passen.

Option 2.0 (schlecht): Sie können diese Animation abbrechen oder entfernen. Die Tastatur befindet sich ohne Bewegung auf dem Bildschirm. Jetzt sind Sie an der Reihe, um Ihre Steuerelemente so zu verschieben/zu skalieren, dass sie auf den verbleibenden Platz passen.

Option 2.1: Es gibt ein Problem mit 2.0: Das Entfernen der Transformation verhindert, dass Sie über die Tastatur benachrichtigt werden. Wenn Sie eine umgekehrte Animation auf dem untergeordneten Element Ihrer Seite einrichten, wenn sich die Y-Eigenschaft ändert, wird die ursprüngliche Übersetzung "abgebrochen".

<Grid x:Name="LayoutRoot" Background="Transparent" VerticalAlignment="Stretch"> 
    <Grid.RenderTransform> 
     <TransformGroup> 
      <TranslateTransform /> 
     </TransformGroup> 
    </Grid.RenderTransform> 

    static void OnRootFrameTransformChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) 
    { 
     // ... edit from the blog article ... 
     MainPage page = source as MainPage; 
     page.lb.Items.Add(newvalue); 
     var oppositeTransform = (TranslateTransform)((TransformGroup)page.RenderTransform).Children[0]; 
     if (newvalue < 0.0) 
     { 
      page.IsSipVisibleGuess.IsChecked = true; 
      oppositeTransform.Y = -newvalue; 
     } 
     else if (newvalue == 0.0) 
     { 
      page.IsSipVisibleGuess.IsChecked = false; 
      oppositeTransform.Y = 0; 
     } 

Es tut mir leid keine dieser Optionen wird auf magische Weise das Problem lösen, aber es kann Ihnen helfen, codieren, was für Ihre Anwendung am besten passt.

Wenn Sie eine bessere Lösung finden, posten Sie es bitte als Antwort.