2013-04-04 4 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++); 
     } 
    } 

И я называю этот код в моем Initial метод UI здесь, как только интерфейс был обновлен:

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

Если я не позвоню последней части, я получу первую полную страницу и ничего больше.
Если я называю последнюю часть, я получаю первые 3 колонки на первой странице и элемент добавляется в FlipView, но текст не отображается на второй странице и четвёртая колонка исчезает

Что не я делать, чтобы показать все объекты 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. Однако, как правило, это не рекомендуется. Обычно это необязательно и может привести к снижению производительности при чрезмерном использовании. ...

Смежные вопросы