1

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 が更新されたら、Initial UI メソッドでこのコードを呼び出します。

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

最後の部分を呼び出さないと、最初の完全なページだけが取得されます。
最後の部分を呼び出すと、最初のページで最初の 3 列が取得され、項目が に追加されFlipViewますが、2 ページ目にテキストが表示されず、4 列目が消えます。

すべての RTBO オブジェクトを表示するために何をしていないのですか?

4

1 に答える 1

0

FlipViewレイアウトも更新する必要があると思います。このようにして、HasOverflowContentプロパティはオーバーフロー コンテンツがあるかどうかを認識し、真の値 (真または偽) を返します。

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メソッドを使用して、組み込みのレイアウト システムの動作に依存するのではなく、アプリ コードによって強制的に行うことができます。ただし、これは一般的に推奨されません。通常は不要であり、使いすぎるとパフォーマンスが低下する可能性があります。...

于 2013-05-26T18:40:17.333 に答える