2014-11-22 3 views
1

Я в основном играю с элементом управления WPF TextBox, недавно после перехода из WinForms, и мне просто интересно, есть ли способ прокрутки к определенной строке в текстовом поле WPF? Как это можно достичь?WPF - перейти к строке в текстовом поле

Для WinForms TextBox, в основном, Для перехода к определенной строке кода будет что-то вроде:

Private Sub MoveCaretToLine(txtBox As TextBox, lineNumber As Integer) 
    txtBox.HideSelection = False 
    txtBox.SelectionStart = txtBox.GetFirstCharIndexFromLine(lineNumber - 1) 
    txtBox.SelectionLength = txtBox.Lines(lineNumber - 1).Length 
    txtBox.ScrollToCaret() 
End Sub 

Но я понятия не имею, как я могу достичь его для WPF TextBox? Я действительно размещаю WPF TextBox через HostElement в WinForms и хотел бы знать, как я могу это достичь.

+0

Если вы используете FlowDocument, вы можете сделать Run.BringIntoView, но TextBox не будет размещать FlowDocument. – Paparazzi

+0

Спасибо за это, но я хотел бы знать, как я могу это сделать для WPF TextBox – Zer0

+0

Почему? Почему бы просто не использовать другой элемент управления, который делает то, что вам нужно? – Paparazzi

ответ

1

Как указано и что вы обнаружили, нет прокруткиToCaret в WPF, существует метод ScrollToLine и метод CaretIndex, объединив их, я думаю, что он будет работать так, как вы этого хотите. Посмотрите, работает ли это для вас

Private Sub MoveCaretToLine(txtBox As TextBox, lineNumber As Integer) 
    txtBox.SelectionStart = txtBox.GetCharacterIndexFromLineIndex(lineNumber - 1) 
    txtBox.SelectionLength = txtBox.GetLineLength(lineNumber - 1) 
    txtBox.CaretIndex = txtBox.SelectionStart 
    txtBox.ScrollToLine(lineNumber - 1) 
    txtBox.Focus() 
End Sub 
+0

Благодарю вас @ Mark Hall. Это сработало: D – Zer0

+0

Добро пожаловать, рад помочь. –

Смежные вопросы