我想让我的头在WPF RichTextBox中的TextPointer类。如何跟踪WPF RichTextBox中的TextPointer?
我希望能够跟踪它们,这样我可以在文本区域信息相关联。
我目前一个非常简单的例子努力设法弄清楚到底是怎么回事。在PreviewKeyDown事件中,我存储插入符的位置,然后在PreviewKeyUp事件中,我将根据插入符前后位置创建一个TextRange。下面是一个代码示例,说明了什么,我试图做的:
// The caret position before typing
private TextPointer caretBefore = null;
private void rtbTest_PreviewKeyDown(object sender, KeyEventArgs e)
{
// Store caret position
caretBefore = rtbTest.CaretPosition;
}
private void rtbTest_PreviewKeyUp(object sender, KeyEventArgs e)
{
// Get text between before and after caret positions
TextRange tr = new TextRange(caretBefore, rtbTest.CaretPosition);
MessageBox.Show(tr.Text);
}
的问题是,我得到的文本是空白。例如,如果我输入字符'a',那么我希望在TextRange中找到文本“a”。
有谁知道发生了什么问题?这可能是非常简单的事情,但我花了一个下午无处可去。
我试图拥抱新的WPF技术,但发现特别RichTextBox的是如此复杂,它使得即使做简单的事情,像这样的困难。如果任何人有任何解释TextPointer的好工作,如果您能告诉我,我将不胜感激。
嗨Ray, 非常感谢这样的信息回复。非常感谢,并且肯定有助于为我理清关于逻辑方向的事情 - 我尝试了您的实验。 我最终设想的是逐行处理文档。我知道GetLineStartPosition方法,但想知道是否知道如何从TextPointer中获取行尾的位置? 再次感谢, Alan – 2010-06-16 10:58:41
您可以通过更改您传入的计数来控制GetLineStartPosition的移动方式。如果您想了解更多细节,了解它如何工作以及如何使用它来获得行结束位置,请在此处张贴另一个问题堆栈溢出。足以解释它需要一个单独的问题和答案。这些评论中的格式化能力也非常有限。 – 2010-06-16 15:27:02
嗨Ray, 谢谢你回到我身边。我很欣赏评论的局限性,并在此发布了一个新问题:http://stackoverflow.com/questions/3060108/using-getlinestartposition-to-get-the-end-of-a-line-in-wpf- RichTextBox的 – 2010-06-17 08:38:57