昨天我遇到了这个问题,似乎很多人过去都有类似的问题,所以我想我会提出我的问题&我最终提出的解决方案。微软在8.1 SDK中有更清晰的解决方案,但绝大多数WP应用用户都在8.0及以下,所以我想这仍然会有所帮助。
当您在Windows Phone 7/8 Silverlight应用程序中打开虚拟键盘时,导致键盘打开的文本框位于屏幕的下半部分(将被键盘覆盖),它会滚动整个页面。如果您需要显示顶部的内容,如何确定滚动的数量?
答案 0 :(得分:0)
它有点笨重,但你可以通过查看根框架的偏移来获得页面向上滚动的数量。
由于这是动画到位,问题变成“何时”。我发现有效的方法是,当一个文本框的GotFocused事件被触发时,订阅LayoutUpdated事件,当触发LayoutUpdated时,从那里获取偏移量。如果您尚未订阅该活动,则可以取消订阅LostFocus活动。当它移动时,你会得到改变。
double lastOffset = 0;
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
LayoutUpdated += MyControl_LayoutUpdated;
}
private void MyControl_LayoutUpdated(object sender, EventArgs e)
{
// Grab the offset out of the root frame's RenderTransform object
PhoneApplicationFrame root = App.Current.RootVisual as PhoneApplicationFrame;
TransformGroup transform = root.RenderTransform as TransformGroup;
double offset = transform.Value.OffsetY;
if (offset != lastOffset)
{
// Do your logic here if the offset has changed
lastOffset = offset;
}
}
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
// Unsubcribe to updates and reset the offset to 0
LayoutUpdated -= MyControl_LayoutUpdated;
lastOffset = 0;
}
获得此偏移后,您可以根据需要更改控件。您可以将控件的高度缩小该量,或者如果顶部有一些小的东西,比如标题,则可以通过偏移的倒数应用TranslateTransform来向下移动它。