Windows phone 7 当键盘已可见时,以编程方式将焦点设置为文本框

Windows phone 7 当键盘已可见时,以编程方式将焦点设置为文本框,windows-phone-7,Windows Phone 7,我有一个页面,底部有两个文本框、一个复选框和另外两个文本框 单击该复选框时,我希望将焦点设置为其下方的文本框。 这工作正常,软键盘出现,屏幕向上滚动显示键盘上方的文本框 但是,如果TextBox1或TextBox2当前处于焦点且键盘已显示,则通过复选框单击事件设置焦点将重置屏幕并向下滚动 我猜这些事件相互冲突 -文本框失去焦点并隐藏键盘+向下滚动屏幕 -文本框从外部获得焦点并显示键盘(但不向上滚动屏幕) 这能以某种方式防止吗 这里是xaml的简化版本和代码 xaml: <Grid x:Na

我有一个页面,底部有两个文本框、一个复选框和另外两个文本框

单击该复选框时,我希望将焦点设置为其下方的文本框。 这工作正常,软键盘出现,屏幕向上滚动显示键盘上方的文本框

但是,如果TextBox1或TextBox2当前处于焦点且键盘已显示,则通过复选框单击事件设置焦点将重置屏幕并向下滚动

我猜这些事件相互冲突 -文本框失去焦点并隐藏键盘+向下滚动屏幕 -文本框从外部获得焦点并显示键盘(但不向上滚动屏幕)

这能以某种方式防止吗

这里是xaml的简化版本和代码

xaml:

<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();
}