Windows phone 7 当键盘已可见时,以编程方式将焦点设置为文本框
我有一个页面,底部有两个文本框、一个复选框和另外两个文本框 单击该复选框时,我希望将焦点设置为其下方的文本框。 这工作正常,软键盘出现,屏幕向上滚动显示键盘上方的文本框 但是,如果TextBox1或TextBox2当前处于焦点且键盘已显示,则通过复选框单击事件设置焦点将重置屏幕并向下滚动 我猜这些事件相互冲突 -文本框失去焦点并隐藏键盘+向下滚动屏幕 -文本框从外部获得焦点并显示键盘(但不向上滚动屏幕) 这能以某种方式防止吗 这里是xaml的简化版本和代码 xaml:Windows phone 7 当键盘已可见时,以编程方式将焦点设置为文本框,windows-phone-7,Windows Phone 7,我有一个页面,底部有两个文本框、一个复选框和另外两个文本框 单击该复选框时,我希望将焦点设置为其下方的文本框。 这工作正常,软键盘出现,屏幕向上滚动显示键盘上方的文本框 但是,如果TextBox1或TextBox2当前处于焦点且键盘已显示,则通过复选框单击事件设置焦点将重置屏幕并向下滚动 我猜这些事件相互冲突 -文本框失去焦点并隐藏键盘+向下滚动屏幕 -文本框从外部获得焦点并显示键盘(但不向上滚动屏幕) 这能以某种方式防止吗 这里是xaml的简化版本和代码 xaml: <Grid x:Na
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel Margin="0,100,0,0">
<TextBox x:Name="TextBox1" />
<TextBox x:Name="TextBox2" />
<CheckBox Content="Click Me" Click="CheckBox_Click" />
<TextBox x:Name="TextBox3" />
<TextBox x:Name="TextBox4" />
</StackPanel>
</Grid>
问题是,当焦点位于不在可滚动容器中且被SIP遮挡的控件上时,操作系统将尝试移动页面
我将所有内容放在
ScrollViewer
中,并根据所选控件以及是否显示SIP来调整VerticalScrollOffset
,从而解决了这个问题。这是一个非常混乱,烦琐的代码很多。在开始之前问问自己移动焦点的价值是否值得,因为没有一个简单的解决方案。首先,你应该注意:你的复选框点击事件不能控制复选框是否已经被选中。我看不出来,这是怎么发生的:复选框点击事件会重置屏幕,它会向下滚动,在你的例子中看不到任何滚动。你没错过什么吗?谢谢,马特。我做了另一个变通方法,绑定到帧的Y平移值(当SIP显示/隐藏时会更改),并在键盘不再显示时使用标志设置焦点。有一些键盘向下滑动和再次向上滑动的时髦动画。从这里得到了这个想法:
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
TextBox3.Focus();
}