Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows Phone XAML:如何防止键盘滑入时页面滚动_C#_Silverlight_Keyboard_Winrt Xaml_Windows Phone 8.1 - Fatal编程技术网

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

C# Windows Phone XAML:如何防止键盘滑入时页面滚动,c#,silverlight,keyboard,winrt-xaml,windows-phone-8.1,C#,Silverlight,Keyboard,Winrt Xaml,Windows Phone 8.1,我想创建一个WindowsPhone8.1Silverlight/XAML用户界面,其中包含一个类似Cortana中使用的搜索框。文本框应该位于页面底部,一旦获得焦点,就可以用键盘向上滚动。我的页面的其余部分不应该移动。Cortana用户界面确实做到了这一点,但我还无法在我的应用程序中重现这种行为。我找到了一些解决方案,需要在文本框获得焦点时手动调整UI容器的大小,但这需要估计键盘大小,键盘大小可以随屏幕分辨率的不同而变化,并且在内容恢复到位之前生成一个简短的动画。那么,当键盘滑入时,如何防止我

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

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

您可以访问键盘区域何时显示/隐藏(),并且可以知道被遮挡的矩形是什么。使用此事件,您可能可以在那里执行某些操作,但只要您的UI是主视觉树的一部分,您的应用程序仍将滚动


您可以尝试的一件事是将该文本区域放在一个弹出层中,该层不是主应用程序UI的一部分(这意味着它不附于任何可视树)。未登录的弹出窗口不参与主UI滚动行为。如果您这样做了,再加上监听输入窗格何时显示/隐藏,您可能能够实现您想要的功能。

没有一种超级干净的方法可以做到这一点,但在Silverlight中仍然有一些解决方法。当键盘打开时,它将在RootApplicationFrame上设置TranslateTransform的动画。因此,当您关注某个元素时,请订阅页面的LayoutUpdates,并检查转换值


请参见此处的详细信息/代码:

谢谢您的回答!糟糕的是,没有好的方法可以做到这一点,我真的很喜欢底部有盒子的布局,因为当你用一只手拿着你的手机时,它真的很容易到达。也许我会摆弄弹出层,然后把我的发现发布在这里,但如果它太复杂,我可能会改变我的布局您所说的“未登录的弹出窗口不参与主UI滚动行为”是什么意思?主页外部和主页内部使用的单独用户控件将使其“未登录”?对于“当键盘滑入时,防止我的页面内容向上滚动”部分,在显示事件处理程序的InputPane中设置EnsureredFocuseLementView=true可能是答案?然后,对于滚动文本框的部分,需要对键盘滚动动画的样条曲线进行反向工程/客户机优化。