首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向FlipView添加RichTextBlockOverflow

向FlipView添加RichTextBlockOverflow
EN

Stack Overflow用户
提问于 2013-04-05 06:21:02
回答 1查看 950关注 0票数 1

我有一个图书应用程序,我正在使用FlipView控件在用户当前正在阅读的图书中任何选定章节的页面之间进行切换。

我在中动态创建页面,并使用以下代码将它们作为项目添加到FlipView控件中:

代码语言:javascript
复制
    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方法中调用这个代码:

代码语言:javascript
复制
...
if (column4Content.HasOverflowContent)
{
    CreateNewFlipPage(column4Content, 2);  // column4Content is a RTBO object
}
...

如果我不调用最后一部分,我会得到第一个完整的页面,其他什么也得不到。

如果我调用了最后一部分,我会得到第一页上的前3列,并将一个项目添加到FlipView中,但在第二页上不会显示任何文本,第四列将消失

为了显示所有的RTBO对象,我还需要做些什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-27 02:40:17

我认为你也应该让更新你的FlipView Layout。通过这种方式,HasOverflowContent属性知道它是否有溢出内容,并返回它的真值(无论是真还是假)。

代码语言:javascript
复制
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方法依赖内置的布局系统行为。但是,通常不推荐这样做。它通常是不必要的,如果过度使用,可能会导致性能下降。...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15822756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档