1

我开发了一个使用登录表单的通用应用程序,允许用户连接或创建帐户。

这是一个包含TextBoxPasswordBox的简单表单。我的问题是用户在每个字段之间切换并不容易: 在此处输入图像描述

=> 例如,当用户在第二个字段中输入时,他必须停用键盘,在字段中滚动并选择第三个字段。

相比之下,在Windows Store账号的创建表单上,更加人性化: 在此处输入图像描述

=> 当用户将焦点放在一个字段上时,下一个字段也是可见的,就好像这些字段对应的自动滚动一样。因此,用户无需停用键盘即可在下一个字段中输入。所有字段也可以轻松输入。

有没有办法允许重现这个?我已经在 Code-Behind 中使用了“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>

但这并不能解决不使用“Enter”键时出现的问题。

4

1 回答 1

0

当 TextBox 获得焦点(焦点事件)时,您可以尝试使用 ScrollViewer.ChangeView 以编程方式将表单滚动到所需位置。可以通过使用 InputPaneShowing 和 InputPaneHiding 事件获取键盘高度并做出相应反应来改进此行为。

于 2015-11-05T10:30:16.853 回答