Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用RichTextBox中的TextPointer.GetLineStartPosition()获取下一行_C#_Wpf - Fatal编程技术网

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);