2013-04-04 32 views
1

我有一本書應用程序,我正在使用FlipView控件在用戶當前正在閱讀的書中任何選定章節的頁面之間翻頁。將RichTextBlockOverflow添加到FlipView中

我動態創建的頁面,並加入他們作爲FlipView控制與下面的代碼項目:

private void CreateNewFlipPage(RichTextBlockOverflow columnContent, int page) 
    { 
     var fvItem = new FlipViewItem(); 
     var grid = GetOverflowGrid(); // Pre-formatted grid with 4 columns (index 0, 2, 4, and 6) and three 30 pixel spacer columns in between (index 1, 3, and 5) 

     var overFlow1 = new RichTextBlockOverflow(); 
     var overFlow2 = new RichTextBlockOverflow(); 
     var overFlow3 = new RichTextBlockOverflow(); 
     var overFlow4 = new RichTextBlockOverflow(); 
     var pageText = new TextBlock 
     { 
      VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Bottom, 
      Opacity = 0.5, 
      FontSize = 18.667, 
      Margin = new Thickness(40, 0, 0, 0), 
      Foreground = Application.Current.Resources["ApplicationPageTextOppositeBackgroundThemeBrush"] as SolidColorBrush, 
      FontFamily = new FontFamily("Global User Interface"), 
      Text = "Page " + page 
     }; 

     overFlow4.Margin = new Thickness(0, 0, 0, 40); 

     Grid.SetColumn(overFlow1, 0); 
     Grid.SetColumn(overFlow2, 2); 
     Grid.SetColumn(overFlow3, 4); 
     Grid.SetColumn(overFlow4, 6); 
     Grid.SetColumn(pageText, 6); 

     grid.Children.Add(overFlow1); 
     grid.Children.Add(overFlow2); 
     grid.Children.Add(overFlow3); 
     grid.Children.Add(overFlow4); 
     grid.Children.Add(pageText); 

     fvItem.Content = grid; 
     FlipView.Items.Add(fvItem); 

     overFlow1.OverflowContentTarget = columnContent; 
     overFlow2.OverflowContentTarget = overFlow1; 
     overFlow3.OverflowContentTarget = overFlow2; 
     overFlow4.OverflowContentTarget = overFlow3; 

     overFlow1.Measure(new Size(grid.ColumnDefinitions[0].ActualWidth, grid.ActualHeight)); 
     overFlow2.Measure(new Size(grid.ColumnDefinitions[0].ActualWidth, grid.ActualHeight)); 
     overFlow3.Measure(new Size(grid.ColumnDefinitions[0].ActualWidth, grid.ActualHeight)); 
     overFlow4.Measure(new Size(grid.ColumnDefinitions[0].ActualWidth, grid.ActualHeight)); 

     grid.UpdateLayout(); 

     if (overFlow4.HasOverflowContent) 
     { 
      CreateNewFlipPage(overFlow4, page++); 
     } 
    } 

而且我把這個代碼在我這裏初始UI方法一旦UI已更新:

... 
if (column4Content.HasOverflowContent) 
{ 
    CreateNewFlipPage(column4Content, 2); // column4Content is a RTBO object 
} 
... 

如果我不打電話給最後一部分,我得到第一個完整的頁面,沒有別的。
如果我打電話的最後一部分,我得到的第一個3列的第一頁上,將項目添加到FlipView,但沒有文字顯示在第二頁上4列消失

是什麼我不如何讓所有的RTBO對象顯示?

回答

0

我認爲你應該有更新你的FlipView 佈局太。以這種方式,HasOverflowContent屬性知道它有任何溢出內容或不是並返回它的真實值(無論是true還是false)。

grid.UpdateLayout(); 

FlipView.UpdateLayout(); // Add this Line Here 

if (column4Content.HasOverflowContent) 
{ 
    CreateNewFlipPage(column4Content, 2); 
} 

但我對性能有懷疑。閱讀UpdateLayout請()文件位置:
http://msdn.microsoft.com/en-US/library/windows/apps/windows.ui.xaml.uielement.updatelayout

...佈局更新可以通過應用程序代碼被強制,而不是依靠內置的佈局系統行爲通過UpdateLayout請方法 。 但是,這通常不被推薦。通常不需要 ,如果過度使用可能會導致性能下降。 ...