2013-07-10 75 views
8

我正在製作簡單的聊天應用程序時,遇到以下代碼的兩個問題。代碼在頁面頂部顯示一個文本塊,在底部顯示兩個文本框。另外還有一個列表框,它將自動填充剩餘空隙。當SIP鍵盤出現時,Windows Phone項目滾動問題

<Grid x:Name="LayoutRoot" Background="Transparent"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="1*"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Rectangle Height="1" Fill="White" VerticalAlignment="Top"/> 
     <TextBlock Text="Hello World!" Grid.Row="0" FontSize="36"/> 
     <Listbox Grid.Row="1"/> 
     <TextBox Grid.Row="2"/> 
     <TextBox Grid.Row="3"/> 
</Grid> 
  1. 當我點擊頂部的文本框之一,SIP鍵盤變爲可見,並在頁面中的所有內容都推高。這裏的主要問題是頂部文本塊消失並隱藏在頂部。在查看SIP鍵盤時,如何將其保持在最高位置而不移動?

  2. 當最底部的文本框有焦點時,會出現SIP鍵盤並向上推送所有內容。在這種情況下,鍵盤將適合並粘貼到該文本框。但是,當其他文本框具有焦點時,鍵盤會在它們之間產生間隙。如何讓鍵盤按照最底層的焦點一樣進行操作?

+0

[Windows phone 7鍵盤大小]的可能重複(http://stackoverflow.com/questions/4399153/windows-phone-7-keyboard-size) – SandRock

回答

1

當鍵盤持久性有機污染物和unpops,在PhoneApplicationFrame一個TranslateTransform運行,翻譯整個屏幕上下。

根據this article,您應該能夠獲得翻譯的價值。正如您可以觀察到動畫將Y屬性從零移動到特定負值(基於您關注的控件)。選項1:我無法編寫處理此值的下降方式,但您應該可以調整控件大小以適應屏幕左側的內容。

選項2.0(壞):您可以取消或刪除此動畫。鍵盤將在屏幕上方無任何移動。現在輪到您移動/調整控件大小以適應剩餘空間。

public MainPage() 
    { 
     this.InitializeComponent(); 

     PhoneApplicationFrame frame = (App.Current as App).RootFrame; 
     var group = (frame.RenderTransform as TransformGroup); 
     group.Children.RemoveAt(0); // remove translate transform 
    } 

選項2.1:2.0版存在問題:刪除轉換會阻止您收到有關鍵盤的通知。當Y屬性更改時,在頁​​面的子項上設置反轉動畫將「取消」原始翻譯。

<Grid x:Name="LayoutRoot" Background="Transparent" VerticalAlignment="Stretch"> 
    <Grid.RenderTransform> 
     <TransformGroup> 
      <TranslateTransform /> 
     </TransformGroup> 
    </Grid.RenderTransform> 

    static void OnRootFrameTransformChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) 
    { 
     // ... edit from the blog article ... 
     MainPage page = source as MainPage; 
     page.lb.Items.Add(newvalue); 
     var oppositeTransform = (TranslateTransform)((TransformGroup)page.RenderTransform).Children[0]; 
     if (newvalue < 0.0) 
     { 
      page.IsSipVisibleGuess.IsChecked = true; 
      oppositeTransform.Y = -newvalue; 
     } 
     else if (newvalue == 0.0) 
     { 
      page.IsSipVisibleGuess.IsChecked = false; 
      oppositeTransform.Y = 0; 
     } 

對不起,這些選項都不會奇蹟般地解決問題,但它可以幫助您編寫最適合您的應用的代碼。

如果您發現了更好的解決方案,請將其作爲答案發布。