none
用RichTextBlockOverflow进行分栏时,ContentStart与ContentEnd的Offset值与实际的总是相差2 RRS feed

  • 问题

  • 用一个RichTextBlock和一个RichTextBlockOverflow进行分栏,RichTextBlock显示的内容是从Content.SubString(0,ContentEnd.Offset-2),这个是为什么
    2012年11月1日 2:31

答案

  • 是在开始位置有两个位移量,这两个位移量不是你用了 RichTextBlockOverflow  产生的,而是这个TextPointer的位移量需要计算字符开始边界,Paragraph边界等值,所以如果你直接在RTB中加入一个Paragraph和Run 第一个字符就是Offset 2-3 , 不是0-1

    如果是

     <Paragraph>
        <Run Text="a"/>
        <Run Text="b"/>
     </Paragraph>

    则a为 2-3  b为8-9 整个范围为0-9

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

    2012年11月8日 8:22
    版主

全部回复

  • 具体代码如何,内容是全中文还是有相杂的?


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

    2012年11月2日 8:56
    版主
  • 全中文,但是里面可能有一些英文的标点
    2012年11月5日 6:31
  • 具体有样例代码吗? 因为 我不清楚你是怎么测试得出的 结果, 在什么时机如何的步骤测试的?


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

    2012年11月5日 6:55
    版主
  • 写一个最简单的例子好了

    xaml:

    <Button Content="DoCopy" VerticalAlignment="Center" HorizontalAlignment="Center" Click="ShowOverflow"/>

    <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom">
                <RichTextBlock x:Name="richTB" FontSize="20" TextWrapping="Wrap" Width="100" Height="30">
                </RichTextBlock>
                <RichTextBlockOverflow x:Name="overFlow" Margin="20,0,0,0" Height="30"/>
            </StackPanel>    

    cs ShowOverflow:

    Paragraph p = new Paragraph();
                richTB.Blocks.Add(p);
                p.Inlines.Add(new Run {Text = "测试测试测试123456789测试测试测试" });
                richTB.OverflowContentTarget = overFlow;
                overFlow.UpdateLayout();
                System.Diagnostics.Debug.WriteLine(richTB.ContentStart.Offset);
                System.Diagnostics.Debug.WriteLine(richTB.ContentEnd.Offset);

    输出结果是0,7,但是richTB中的内容只有5个字符

    2012年11月5日 10:40
  • 是在开始位置有两个位移量,这两个位移量不是你用了 RichTextBlockOverflow  产生的,而是这个TextPointer的位移量需要计算字符开始边界,Paragraph边界等值,所以如果你直接在RTB中加入一个Paragraph和Run 第一个字符就是Offset 2-3 , 不是0-1

    如果是

     <Paragraph>
        <Run Text="a"/>
        <Run Text="b"/>
     </Paragraph>

    则a为 2-3  b为8-9 整个范围为0-9

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

    2012年11月8日 8:22
    版主