none
RichTextBlock计算Overflow RRS feed

  • 问题

  • 情景是这样的

    有一个很大的字符串,第一页有一个RichTextBlock,如果有溢出内容,则新建一个grid,并将溢出内容绑定到新的页面,如此递归,直到没有溢出内容内容,判断是否溢出主要用的方法是

    Grid.Measure(),不知道这个方法选择的有没有问题,因为经常算不准,实际上页面还空了不少内容,最终还会多生成一个空的Grid,非常恼火,请指点迷津!!!

    代码如下:

    RichTextBlock contentRTB = new RichTextBlock();

    var block = new Paragraph();
    block.Inlines.Add(new Run() { Text = text });

    grid.children.Add(contentRTB);

    grid.Measure(Window.Current.Content.RenderSize);

    bool hasOverflow=contentRTB.HasOverflowContent;

    List<RichTextBlockOverflow> overflows=new List<RichTextBlockOverflow>();

    if(hasOverflow)

    {

    Grid newGrid=new Grid();

    overflows.Add(new RichTextBlockOverflow());

    contentRTB.OverflowContentTarget = overflows[0];

    newGrid.Children.Add(overflows[0]);

    newGrid.Measure(Window.Current.Content.RenderSize);

    hasOverflow=overflows[0].HasOverflowContent

    }

    while(hasOverflow)

    {

    Grid otherGrid=new Grid();

    overflows.Add(new RichTextBlockOverflow());

    overflows[overflows.Count-2].OverflowContentTarget = overflows[overflows.Count-1];

    otherGrid.Children.Add(overflows[overflows.Count-1]);

    otherGrid.Measure(Window.Current.Content.RenderSize);

    hasOverflow=overflows[overflows.Count-1].HasOverflowContent

    }


    别紧张,我不是什么好人。。。

    2012年10月22日 4:13

答案

  • 你的Grid先要加入到可视树中,先获得自己的大小,然后调用 Measure 可以测量出内容的大小。所以你应该设定好你的Grid大小先,先将其放置到你的布局中,然后再此测量其大小。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月22日 7:50
    版主

全部回复

  • 是我描述的不清楚吗?怎么没人回答一下呢?

    别紧张,我不是什么好人。。。

    2012年10月22日 5:30
  • 你的Grid先要加入到可视树中,先获得自己的大小,然后调用 Measure 可以测量出内容的大小。所以你应该设定好你的Grid大小先,先将其放置到你的布局中,然后再此测量其大小。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月22日 7:50
    版主
  • 果然行家一出手,就知有没有啊!

    解决了!


    别紧张,我不是什么好人。。。

    2012年10月22日 8:52