2015-07-03 21 views
2

我注意到,如果TextBox是在Page,那麼一切正常工作。每當TextBox聚焦時,它將滾動到鍵盤上方的正確位置,以便用戶能夠在輸入時看到文本。不管什麼原因,ContentDialog都有點不同。鍵盤很容易覆蓋TextBox。有什麼明顯的設置,我失蹤了?爲什麼不是ContentDialog裏面的文本框自動滾動鍵盤上方

我創建了一個默認ContentDialog並將代碼複製到頁面。並獲得以下截圖。除了上一級XAML元素的左列爲<ContentDialog>,右列爲<Page>之外,其他所有內容都是相同的。

左圖片 - ContentDialog鍵盤之前彈出
右鍵圖片 - Page鍵盤彈出

左圖像之前 - ContentDialog鍵盤後彈出
右鍵圖片 - Page鍵盤後彈出

下面是相關的代碼:

<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

回答

1

一旦我遇到與TextBox類似的問題並找到answer here。基本上,一旦顯示鍵盤,被聚焦的元素不會向上移動,您可以通過進行額外的變換來糾正這種行爲:

// 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; 
}; 
+0

太棒了!像魅力一樣工作。謝謝! –

相關問題