Windows Phone XAML:如何防止键盘滑动时页面滚动

本文关键字:滚动 键盘 XAML Phone 何防止 Windows | 更新日期: 2023-09-27 18:06:30

我想创建一个Windows Phone 8.1 Silverlight/XAML UI,其中包含一个类似于Cortana中使用的搜索框。文本框应该在页面的底部,并随着键盘向上滚动,一旦它得到焦点。页面的其余部分不应该移动。Cortana UI确实做到了这一点,但我无法在我的应用中重现这种行为。我已经找到了解决方案,需要在文本框获得焦点时手动调整UI容器的大小,但这需要估计键盘大小,这可以随着不同的屏幕分辨率而改变,并且在内容恢复到位之前还会产生一个简短的动画。那么,当键盘滑入时,如何防止页面内容向上滚动呢?

Windows Phone XAML:如何防止键盘滑动时页面滚动

没有真正好的方法来做到这一点。Cortana是系统UI,超越任何现有的应用程序空间。对于你的应用程序,假设你的应用程序中的任何UI都是整个应用程序的一部分。对于软件键盘显示的输入,应用程序内容被滚动到视图中以确保上下文不会丢失。这是您无法更改的默认行为。

你确实可以访问键盘区域何时显示/隐藏(Windows.UI.ViewManagement.InputPane.InputPaneShowing[hiding]),并且可以知道被遮挡的矩形将是什么。使用这个事件,你可以在那里做一些事情,但是只要你的UI是主视觉树的一部分,你的应用程序仍然会滚动。

你可以尝试的一件事是将该文本区域放在而不是的弹出层中,这是你的主应用程序UI的一部分(这意味着它不属于任何视觉树)。非父级弹出框不参与主UI滚动行为。如果您这样做,并侦听输入窗格何时显示/隐藏,您可能能够实现您想要的。

没有一个超级干净的方法来做到这一点,但是在Silverlight中也有一些变通的方法。当键盘打开时,它将在RootApplicationFrame上动画TranslateTransform。所以当你把焦点放在一个元素上时,订阅页面的layoutuupdates,并检查转换值。

如何确定键盘偏移