如何确定键盘偏移量

时间:2015-05-16 13:31:27

标签: c# windows-phone-7 windows-phone-8 windows-phone

昨天我遇到了这个问题,似乎很多人过去都有类似的问题,所以我想我会提出我的问题&我最终提出的解决方案。微软在8.1 SDK中有更清晰的解决方案,但绝大多数WP应用用户都在8.0及以下,所以我想这仍然会有所帮助。

当您在Windows Phone 7/8 Silverlight应用程序中打开虚拟键盘时,导致键盘打开的文本框位于屏幕的下半部分(将被键盘覆盖),它会滚动整个页面。如果您需要显示顶部的内容,如何确定滚动的数量?

1 个答案:

答案 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来向下移动它。