2011-02-18 65 views
0

我在页面上有一个PasswordBox,我尝试设置为在导航到页面时自动获得焦点。当PasswordBox给定焦点时,软件键盘从屏幕消失

我遇到了问题,当我以编程方式给焦点时,它接受焦点,但键盘消失。

这会导致问题,因为用户必须单击密码框,然后再使用该控件。

我已经尝试在页面的Loaded事件,ContentGrid.Loaded,OnNavigatedTo中添加此代码,并且它们都产生相同的结果。

我已经尝试设置页面的TabIndex/IsTabStop和控件本身,但它似乎不工作。密码箱是唯一具有TabIndex的项目。

<PasswordBox x:Name="pwbAnswer" Style="{StaticResource PasswordBoxStyle}" VerticalAlignment="Top" Grid.Row="3" 
       PasswordChanged="pwbAnswer_PasswordChanged" KeyUp="pwbAnswer_KeyUp" TabIndex="1" IsTabStop="True" /> 



private void ContentGrid_Loaded(object sender, RoutedEventArgs e) 
      { 
       this.IsTabStop = true; 
       pwbAnswer.Focus(); 
      } 

回答

3

您必须使用PasswordBox的加载事件。我有同样的问题。 而且,如果您连接到该加载事件,则可以将焦点设置为发件人(即密码箱本身)。

<PasswordBox x:Name="pwbAnswer" Style="{StaticResource PasswordBoxStyle}" VerticalAlignment="Top" Grid.Row="3" 
       Loaded="PasswordBox_Loaded" PasswordChanged="pwbAnswer_PasswordChanged" KeyUp="pwbAnswer_KeyUp" TabIndex="1" IsTabStop="True" /> 



private void PasswordBox_Loaded(object sender, RoutedEventArgs e) 
      { 
       PasswordBox box = sender as PasswordBox; 
       box.Focus(); 
      } 

或者您可以对LayoutUpdated事件使用解决方法。

<Page .... LayoutUpdated="ContentGrid_LayoutUpdated"> 
<PasswordBox x:Name="pwbAnswer" Style="{StaticResource PasswordBoxStyle}" VerticalAlignment="Top" Grid.Row="3" 
       KeyUp="pwbAnswer_KeyUp" TabIndex="1" IsTabStop="True" /> 

private void ContentGrid_LayoutUpdated(object sender, RoutedEventArgs e) 
      { 
       this.IsTabStop = true; 
       pwbAnswer.Focus(); 
      } 
+0

感谢您的回复。我切换到使用PasswordBox的Loaded事件,但是会出现相同的结果。键盘最初打开时间为1/10秒,消失,并且该盒子仍处于选中状态。 – 2011-02-18 22:26:32