为什么ContentDialog里面的TextBox不能自动​​滚动到键盘上方

我注意到,如果TextBox是在一个Page ,那么一切工作完美。 每当TextBox被聚焦时,它将滚动到键盘上方的正确位置,以便用户能够在input时看到文本。 不pipe什么原因, ContentDialog都有点不同。 TextBox很容易被键盘覆盖。 有什么明显的设置,我失踪?

我创build一个默认的ContentDialog并将代码复制到一个页面。 并获得以下截图。 除了上层XAML元素是左侧列的<ContentDialog> ,右侧列是<Page>以外,其他所有内容都是相同的。

在popup的键盘上留下图像 – ContentDialog
正确的图像 – 键盘popup之前的Page

popup键盘后左图像 – ContentDialog
正确的图像 – 键盘popup后的页面

这里是相关的代码:

 <StackPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <TextBox Name="email" Header="Email address"/> <PasswordBox Name="password" Header="Password"/> <CheckBox Name="showPassword" Content="Show password"/> <!-- Content body --> <TextBlock Name="body" Style="{StaticResource MessageDialogContentStyle}" TextWrapping="Wrap"> <TextBlock.Text> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </TextBlock.Text> </TextBlock> </StackPanel> 

为什么ContentDialogTextBox没有在键盘上滚动,就像在Page

Solutions Collecting From Web of "为什么ContentDialog里面的TextBox不能自动​​滚动到键盘上方"

一旦我遇到类似的问题与TextBox ,并找到答案在这里 。 基本上,一旦显示键盘,被聚焦的元素不会向上移动,您可以通过进行额外的变换来纠正这种行为:

 // add this code somewhere to your constructor of your page or content dialog - where the problematic TextBox is located Windows.UI.ViewManagement.InputPane.GetForCurrentView().Showing += (s, args) => { const double extraHeightBuffer = 20.0; UIElement focused = FocusManager.GetFocusedElement() as UIElement; if (null != focused) { GeneralTransform gt = focused.TransformToVisual(this); Point focusedPoint = gt.TransformPoint(new Point(0, focused.RenderSize.Height - 1)); double bottomOfFocused = focusedPoint.Y + extraHeightBuffer; if (bottomOfFocused > args.OccludedRect.Top) { var trans = new TranslateTransform(); trans.Y = -(bottomOfFocused - args.OccludedRect.Top); this.RenderTransform = trans; } args.EnsuredFocusedElementInView = true; } }; Windows.UI.ViewManagement.InputPane.GetForCurrentView().Hiding += (s, args) => { var trans = new TranslateTransform(); trans.Y = 0; this.RenderTransform = trans; args.EnsuredFocusedElementInView = false; };