C# Wpf Richtextbox选择起始列和行号返回不同的值

C# Wpf Richtextbox选择起始列和行号返回不同的值,c#,wpf,indexing,richtextbox,C#,Wpf,Indexing,Richtextbox,我正在初始化Richtextbox void InitRTBFlowDocument() { Style noSpaceStyle = new Style(typeof(Paragraph)); noSpaceStyle.Setters.Add(new Setter(Paragraph.MarginProperty, new Thickness(0))); rtbTextEditor.Resources.Add(typeof(Paragra

我正在初始化Richtextbox

void InitRTBFlowDocument()
    {
        Style noSpaceStyle = new Style(typeof(Paragraph));
        noSpaceStyle.Setters.Add(new Setter(Paragraph.MarginProperty, new Thickness(0)));
        rtbTextEditor.Resources.Add(typeof(Paragraph), noSpaceStyle);
    }
我想获得Richtext box选择词行数和列数。第一次正确返回时,我编写了如下代码

void rtbTextEditor_SelectionChanged(object sender, RoutedEventArgs e)
    {
        //Get the richtext box selected text
        Init.RTBSelectionText = rtbTextEditor.Selection.Text.Trim();
        Init.SelectionText = rtbTextEditor.Selection.Text.Trim();
        Init.isSelect = true;
        if (Init.RTBSelectionText != string.Empty)
        {
            TextPointer tp = rtbTextEditor.Selection.Start.GetPositionAtOffset(-2, LogicalDirection.Forward);
            if (tp != null)
                GetStartingIndex();
        } 
        Init.RTBContent = new TextRange(rtbTextEditor.Document.ContentStart, rtbTextEditor.Document.ContentEnd).Text;
    }

void GetStartingIndex()
    {
        TextPointer tp1 = rtbTextEditor.Selection.Start.GetLineStartPosition(0);
        TextPointer tp2 = rtbTextEditor.Selection.Start;

        int SelectionColumnIndex = tp1.GetOffsetToPosition(tp2)-1;//column number

        int someBigNumber = int.MaxValue;
        int lineMoved;
        rtbTextEditor.Selection.Start.GetLineStartPosition(-someBigNumber, out lineMoved); //Line number
        int SelectionRowIndex = -lineMoved;

        Init.RTBTextPoint = new RTBTextPointer();
        Init.RTBTextPoint.Row = SelectionRowIndex;
        Init.RTBTextPoint.Column = SelectionColumnIndex;
     }
清除并添加新内容后,该职位返回错误号码

 public void DisplayContent(string content)
    {
        //Clear the rich text box
        rtbTextEditor.Document.Blocks.Clear();

        rtbTextEditor.Document.Blocks.Add(new Paragraph(new Run(content)));
    }
以上代码中有任何内容。 请帮帮我
提前谢谢

这是因为RTB中的内容不仅包含文本,还包含这些称为TextPointerContext的内容。我们要考虑到这一点。您可以使用以下命令检查TextPointer的相邻位置:

TextPointer.GetPointerContext(LogicalDirection);
要获取下一个文本指针,请执行以下操作:

TextPointer.GetNextContextPosition(LogicalDirection);
我在最近的一个项目中使用了一些示例代码,这确保指针上下文的类型为Text:

while (start.GetPointerContext(LogicalDirection.Forward) 
                             != TextPointerContext.Text)
{
    start = start.GetNextContextPosition(LogicalDirection.Forward);
    if (start == null) return;
}
当您清除RTB时,您可能正在删除其中一些指针上下文。因此,使用GetPositionAtOffset时要小心。这会给你一个指向正确方向的指针。如果你还需要帮助,请告诉我


猎得好

谢谢JessMcintosh!如何在不删除TextPointerContext.的情况下更改richtextbox内容。。请帮助我不要试图删除TextPointerContext,检查是否有,并说明原因。我正在清除RTB内容。。我不会直接删除任何TextPointerContext.你能解释一下吗