C# Wpf Richtextbox选择起始列和行号返回不同的值
我正在初始化RichtextboxC# 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
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.你能解释一下吗