none
How to get the RichTextBlockOverflow's content ? RRS feed

  • 问题

  • How to get content of a RichTextBlockOverflow ?

    Can i modify the content of RichTextBlockOverflow?

    I just want a method like

    string content=RichTextBlockOverflow.Content;

    RichTextBlockOverflow.Content=content.TrimStar('\r')


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

    2012年9月25日 8:19

答案

  • 我们可以通过 RichTextBlockOverflow 的 ContentStart 和 ContentEnd 属性来获得内容,这开始和结束点分别有其Offset 是指在原始RichTextBlock 中的内容位移量。

    下面代码获得overflow内容,rtb为原始的RichTextBlock:

                if (firstOverflowContainer.HasOverflowContent)
                {
                    var start = firstOverflowContainer.ContentStart;
                    var end = firstOverflowContainer.ContentEnd;
                    RichTextBlock rtb = firstOverflowContainer.ContentSource;
                    rtb.Select(start, end);
                    var text = rtb.SelectedText;
                }

    不过我们要修改内容,则必须基于TextPointer所在的 Run 元素去修改其中的Text属性,如果我们一次从TextPointer中的Parent得不到Run, 则可能此TP不是在Run中或者需要循环递归向上继续寻找:

                    Run run = start.Parent as Run;
                    if (run != null)
                    {
                        run.Text = "test";
                        // 你可以根据位移量来替换或者修改原先的字符串内容
                    }


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

    2012年9月26日 5:52
    版主

全部回复

  • 我们可以通过 RichTextBlockOverflow 的 ContentStart 和 ContentEnd 属性来获得内容,这开始和结束点分别有其Offset 是指在原始RichTextBlock 中的内容位移量。

    下面代码获得overflow内容,rtb为原始的RichTextBlock:

                if (firstOverflowContainer.HasOverflowContent)
                {
                    var start = firstOverflowContainer.ContentStart;
                    var end = firstOverflowContainer.ContentEnd;
                    RichTextBlock rtb = firstOverflowContainer.ContentSource;
                    rtb.Select(start, end);
                    var text = rtb.SelectedText;
                }

    不过我们要修改内容,则必须基于TextPointer所在的 Run 元素去修改其中的Text属性,如果我们一次从TextPointer中的Parent得不到Run, 则可能此TP不是在Run中或者需要循环递归向上继续寻找:

                    Run run = start.Parent as Run;
                    if (run != null)
                    {
                        run.Text = "test";
                        // 你可以根据位移量来替换或者修改原先的字符串内容
                    }


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

    2012年9月26日 5:52
    版主
  • 非常感谢!

    祝您中秋愉快!


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

    2012年9月27日 5:11
  • 这个方法没有用啊,选不到要用的内容

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

    2012年10月19日 8:39