1

Ich entwickle gerade eine universelle Anwendung, aber hier ist ein Problem. Ich habe einen Rahmen mit der TextBox für Benutzer Telefonnummer. Initial PageInputPane funktioniert nicht richtig

Also, ich möchte die Höhe meines LayoutRoot (GRID) ändern, damit es in den freien Speicherplatz passt.
Ich verwende InputPane.GetForCurrentView().Showing und InputPane.GetForCurrentView().Hiding für diesen Zweck. Hier ist mein Code.

Wenn ich außerhalb der TextBox-Tastatur klicke, verbirgt sich hinterher ein schwarzes Loch auf dem Bildschirm. 2

enter image description here

Aber das Interessanteste ist, dass, wenn ich, dass körperliche Zurück-Taste drücken auf meine Lumia, Tastatur versteckt normal und meine LayoutRoot bekommt die Anfangshöhe des Rahmens.

Ist es ein Fehler oder mache ich etwas falsch?

Antwort

2

Es passiert, weil LayRoot eigentlich nicht geladen wird, wenn Sie Ihre LayoutRootInitialHeight im Konstruktor speichern, und es ist ActualHeight == 0. Dann legen Sie LayoutRoot.Height auf 0, so dass es nicht sichtbar wird. Daher sollten Sie Ihre LayoutRootInitialHeight wahrscheinlich in der Loader-Ereignisbehandlungsroutine von LayoutRoot speichern.

Ich würde auch vorschlagen, dass Sie die Höhe von LayoutRoot überhaupt nicht ändern. Es bewirkt, dass Ihr gesamter visueller Baum von Grund auf neu gerendert wird, und es ist im Allgemeinen eine schlechte Übung. Ändern Sie stattdessen RenderTransform aller erforderlichen Elemente, damit sie an die entsprechenden Positionen verschoben werden. RenderTransform ist der richtige Weg, um Bewegungen und Animationen auf dem Bildschirm zu handhaben, und Sie können einige schöne visuelle Effekte erzielen, indem Sie die Weiter-Taste genauso wie die Tastatur nach oben bewegen.

Grob Ihr Code kann wie folgt aussehen:

<Button Content="Next" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center"> 
    <Button.RenderTransform> 
     <CompositeTransform x:Name="NextButtonTransform" TranslateY="0"/> 
    </Button.RenderTransform> 
</Button> 

...

private void UserRegistrationAuthorization_PhoneNumber_Showing(InputPane sender, InputPaneVisibilityEventArgs args) 
{ 
    NextButtonTransform.TranslateY = -300; 
    EnsuredFocusedElementInView = true; 
} 

private void UserRegistrationAuthorization_PhoneNumber_Hiding(InputPane sender, InputPaneVisibilityEventArgs args) 
{ 
    NextButtonTransform.TranslateY = 0; 
    args.EnsuredFocusedElementInView = false; 
} 

und kompliziertere Art und Weise ist es, einige Storyboard laufen, die Ihre nächste Taste in derselben Geschwindigkeit nach oben und unten machen mit Tastatur, immer oben drauf. Obwohl InputPane.GetForCurrentView(). Showing ausgelöst wird, nachdem die Tastatur bereits vollständig angezeigt wurde, sollten Sie alle Animationen an die Ereignisse TextBox.GotFocus und TextBox.LostFocus anschließen. Auf Mobilgeräten wird die Tastatur immer angezeigt, wenn das Textfeld den Fokus hat, so dass es gut funktioniert.

+0

Danke für diese detaillierte Antwort! –