Where is ScrollToCaret in a TextBox in WPF?

2019-02-25 06:07发布

问题:

I'm unable to find that function. Basically I have a multiline text box and when I perform a search, I highlight the result. But if the result is not within view, I would have to manually scroll down until I find the highlighted result, which beats the purpose of the "Find" functionality.

I don't want to use RichTextBox because I've encountered some performance issues with it.

回答1:

You could use GetLineIndexFromCharacterIndex in combination with ScrollToLine:

var selectionStart = x;
var selectionLength = y;
textBox.Select(selectionStart, selectionLength);
textBox.ScrollToLine(textBox.GetLineIndexFromCharacterIndex(textBox.SelectionStart));


回答2:

I found a slightly easier way.

textbox.ScrollToLine(textbox.LineCount - 1);



回答3:

ScrollToLine was not accurate enough for me. My text box had wrapping enabled, so Line Index was not reliable. Instead I used this:

textBox.CaretIndex = selectionStart;
textBox.ScrollToEnd();
textBox.Select(selectionStart, selectionLength);

Basically, ScrollToEnd performs a scroll to caret.



标签: c# wpf textbox