1

Я разработал Универсальное приложение, в котором используется форма входа в систему, которая позволяет пользователям подключаться или создавать учетную запись.Autoscroll в ScrollViewer, содержащий TextBox на Windows Phone 8.1

Это простая форма, которая содержит TextBox и PasswordBox. Моя проблема заключается в том, что это не так просто для пользователя, чтобы переключаться между каждыми полями: enter image description here

=> Например, когда пользователь вводит во втором поле, он должен отключить клавиатуру, выделите в поле и выберите третье поле.

По comparaison, по форме создания счета Windows Store, это более удобно: enter image description here

=> Когда пользователь дает фокус на поле, следующее поле также отображается , как будто есть автопрокрутка, соответствующая этим полям. Таким образом, пользователю не нужно деактивировать клавиатуру для ввода в следующем поле. Все поля также могут быть легко введены.

Есть ли способ, позволяющий воспроизвести это? Я уже использую "KeyDown" событие в фоновом коде, что позволяет пользователю переключаться между полями с "Enter":

private void RegisterTextBox_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     TextBox currentTextBox = (TextBox)sender; 
     if (currentTextBox != null) 
     { 
      if (e.Key == Windows.System.VirtualKey.Enter) 
      { 
       FocusManager.TryMoveFocus(FocusNavigationDirection.Next); 
      } 
     } 
    } 

С этой XAML:

<ScrollViewer x:Name="RegisterScrollViewer"> 
     <StackPanel> 
      <TextBlock x:Uid="loginRegisterTextblockMessage" 
         Style="{StaticResource TitleTextBlockStyle}" 
         Text="Remplissez vos informations d'inscription" /> 
      <TextBox x:Uid="loginRegisterTextboxOrganizationURL" 
        Header="Organization or URL" 
        IsSpellCheckEnabled="False" 
        IsHitTestVisible="True" 
        IsTextPredictionEnabled="False" 
        Text="{Binding OrganizationURL, Mode=TwoWay}" 
        TabIndex="10" 
        KeyDown="RegisterTextBox_KeyDown" 
        /> 
      <TextBox x:Uid="loginRegisterTextboxLastName" 
        Header="Name" 
        Text="{Binding LastName, Mode=TwoWay}" 
        TabIndex="20" 
        KeyDown="RegisterTextBox_KeyDown" 
        /> 
      <TextBox x:Uid="loginRegisterTextboxFirstName" 
        Header="First name" 
        Text="{Binding FirstName, Mode=TwoWay}" 
        TabIndex="30" 
        KeyDown="RegisterTextBox_KeyDown" 
        /> 
      <TextBox x:Uid="loginRegisterTextboxEmail" 
        Header="Email" 
        InputScope="EmailSmtpAddress" 
        Text="{Binding Email, Mode=TwoWay}" 
        TabIndex="40" 
        KeyDown="RegisterTextBox_KeyDown" 
        /> 
      <PasswordBox x:Uid="loginRegisterPasswordboxPassword" 
         Header="Password" 
         Password="{Binding Password, Mode=TwoWay}" 
         TabIndex="50" 
         KeyDown="RegisterPasswordBox_KeyDown" 
         /> 
      <PasswordBox x:Uid="loginRegisterPasswordboxConfirmPassword" 
         Header="Confirm password" 
         Password="{Binding PasswordConfirmation, Mode=TwoWay}" 
         TabIndex="60" 
         KeyDown="RegisterPasswordBox_KeyDown" 
         /> 
      <CheckBox x:Uid="loginRegisterCheckboxTermsOfUse" 
         IsChecked="{Binding TermsOfUse, Mode=TwoWay}" 
         TabIndex="70 "> 
       <TextBlock Style="{StaticResource BaseTextBlockStyle}"> 
        <Run x:Uid="loginRegisterTextblockTermsOfUse1" 
         Text="I accept " /> 
        <Underline> 
         <Hyperlink x:Uid="loginRegisterHyperlinkTermsOfUse" 
            NavigateUri="http://termsofuse.html" > 
          <Run x:Uid="loginRegisterTextblockTermsOfUse2" 
           Text="terms of use" /> 
         </Hyperlink> 
        </Underline> 
       </TextBlock> 
      </CheckBox> 
      <Button x:Uid="loginRegisterButtonRegister" 
        Content="Subscribe" 
        Command="{Binding RegisterCommand}" 
        TabIndex="80" 
        /> 
     </StackPanel> 
    </ScrollViewer> 

Но это не решает проблему, которая возникает без использования клавиши «Ввод».

ответ

0

Когда TextBox сфокусирован (событие фокусировки), вы можете попробовать использовать ScrollViewer.ChangeView для программной прокрутки формы до нужной позиции. Такое поведение можно улучшить, получив высоту клавиатуры, используя события InputPaneShowing и InputPaneHiding, и соответствующим образом отреагируйте.