我试过这个解决方案,效果很好:
尝试监听 TextBox.GotFocus 和 TextBox.LostFocus 事件,以检测应用程序中的 TextBox 何时获得和失去焦点。
将您的全部内容放在ScrollViewer 中,如下所示:
XAML 代码:
<ScrollViewer x:Name="LayoutRoot" Margin="0,0,0,0">
<Grid Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
<TextBlock Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1">
<TextBox HorizontalAlignment="Left" Height="254" Margin="10,183,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="456" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus"/>
</Grid>
</Grid>
</ScrollViewer>
在 ScrollViewer 中添加内容将提供即使在键盘未打开时也能滚动的体验,而这并不理想。
为此,您需要在键盘打开之前和键盘关闭之后禁用滚动。
在 TextBox_GotFocus 事件中播放 ScrollViewer 的上边距:
在构造函数中:
public MainPage()
{
InitializeComponent();
LayoutRoot.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
}
事件:
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
LayoutRoot.Margin = new Thickness(0, 330, 0, 0);
LayoutRoot.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
}
添加 TextBox_LostFocus 事件处理程序还可以在键盘关闭时使页面返回到其原始视图:
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
LayoutRoot.Margin = new Thickness(0, 0, 0, 0);
LayoutRoot.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
}
这有助于您在打开键盘时让页面回到原来的位置。
希望这会有所帮助。