В моей программе есть панель навигации, которая позволяет вам перемещаться по различным разделам в моем TextBox, но проблема в том, что это не работает, если текст, на который я прокручиваю, уже виден на экране.
Как и в этом примере, если я попытаюсь перейти из Раздела 1 в Раздел 3, он не будет работать, так как он уже виден.
![Example 1](https://i.stack.imgur.com/sp8XP.png)
Но в этом примере, если я перейду к разделу 3, он работает нормально, так как его уже не видно.
![Example 2](https://i.stack.imgur.com/8klpz.png)
Функция прокрутки, которую я использую, очень проста:
if (nLine > 0 && nLine <= textBox.LineCount)
textBox.ScrollToLine(nLine - 1);
Я надеюсь, что кто-то сможет пролить свет на альтернативное решение, которое позволяет мне прокручивать, даже если текст уже виден.
Редактировать: Добавлено решение.
Это фрагмент кода из моего проекта.
private static void ScrollToLineCallback(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
var textBox = (TextBox)target;
int newLineValue;
if (Int32.TryParse(e.NewValue.ToString(), out newLineValue))
{
if (newLineValue > 0 && newLineValue <= textBox.LineCount) // Validate
{
textBox.ScrollToLine(newLineValue - 1); // Scroll to Line
// Check and see if we are at the line we want.
if (textBox.GetFirstVisibleLineIndex() <= newLineValue && textBox.GetLastVisibleLineIndex() >= newLineValue)
{
// If not lets move to the desired location
int newLineCorrectionValue = newLineValue - textBox.GetFirstVisibleLineIndex() - 2; // How much further do we need to scroll down?
for (int i = 0; i < newLineCorrectionValue; i++)
{
textBox.LineDown(); // Scroll down
}
}
}
}
}