2013-04-04 1 views
1

나는 현재 사용자가 읽고있는 책에서 선택한 장의 페이지 사이를 넘기 위해 FlipView 컨트롤을 사용하고있는 책 응용 프로그램이 있습니다.FlipView에 RichTextBlockOverflow 추가하기

동적으로의 페이지를 만들고 다음 코드로 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 방법을 사용하여 에 의존하지 않고 응용 프로그램 코드에 의해 강제 될 수있다. 그러나 일반적으로 권장하지는 않습니다. 일반적으로 불필요한 것은 이며 남용하면 성능이 저하 될 수 있습니다. ...