C# 如何使用RichTextBox中的TextPointer.GetLineStartPosition()获取下一行
我正在尝试获取C# 如何使用RichTextBox中的TextPointer.GetLineStartPosition()获取下一行,c#,wpf,C#,Wpf,我正在尝试获取RichTextBox的行 在这里,他们展示了如何做到这一点: 但是无论出于什么原因,我总是得到null作为GetLineStartPosition(1)的返回 XAML nextStart为null。我做错了什么?这需要对FlowDocuments和TextPointers的工作原理进行一些研究。我建议读一下这本书,因为它确实帮助我理解了这一点 我的理论是,如果当前的TextPointer没有to引用,那么GetLineStartPosition方法将不起作用Document.
RichTextBox
的行
在这里,他们展示了如何做到这一点:但是无论出于什么原因,我总是得到
null
作为GetLineStartPosition(1)
的返回
XAML
nextStart
为null
。我做错了什么?这需要对FlowDocument
s和TextPointer
s的工作原理进行一些研究。我建议读一下这本书,因为它确实帮助我理解了这一点
我的理论是,如果当前的TextPointer
没有to引用,那么GetLineStartPosition
方法将不起作用Document.ContentStart
为您提供一个TextPointer
,它位于FlowDocument
中第一个段落的前面。您可以调用GetNextInsertionPosition(LogicalDirection.Forward)
将TextPointer
返回到文档中的下一个有效插入点(本例中为第一个有效插入点)。从这里开始,您进入第一个段落
,然后GetLineStartPosition
开始工作
TextPointer contentStart = rtbEditor.Document.ContentStart.GetNextInsertionPosition(LogicalDirection.Forward);
var nextStart = contentStart.GetLineStartPosition(1);
如果GetLineStartPosition(…)
返回null,这意味着您站在最后一行,此方法与上一个指针相对工作,请尝试使用rtbEditor.Document.ContentStart.GetLineStartPosition(0)
然后获取第X行谢谢。这确实是违反直觉的,尤其是因为GetLineStartPosition()文档中没有提到它
public MainWindow()
{
InitializeComponent();
rtbEditor.AppendText("testtext" + "\r");
rtbEditor.AppendText("testtext" + "\r");
rtbEditor.AppendText("testtext" + "\r");
rtbEditor.AppendText("testtext" + "\r\n");
rtbEditor.AppendText("testtext" + "\r\n");
rtbEditor.AppendText("testtext" + "\r\n");
rtbEditor.AppendText("testtext" + "\n");
rtbEditor.AppendText("testtext" + "\n");
rtbEditor.AppendText("testtext" + "\n");
}
private void Button_Click(object sender, RoutedEventArgs e)
{
TextPointer contentStart = rtbEditor.Document.ContentStart;
var nextStart = contentStart.GetLineStartPosition(1);
}
TextPointer contentStart = rtbEditor.Document.ContentStart.GetNextInsertionPosition(LogicalDirection.Forward);
var nextStart = contentStart.GetLineStartPosition(1);