我的程序中有一个导航栏,允许您导航我的TextBox中的不同部分,但我遇到的问题是,如果我正在滚动的文本已在屏幕上显示,则这不起作用。
就像在这个例子中,如果我尝试从第1节跳到第3节,它将无法工作,因为它已经可见。
但是,在这个例子中,如果我跳到第3节,它可以正常工作,因为它还不可见。
我使用的滚动功能非常简单:
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
}
}
}
}
}
答案 0 :(得分:2)
您可以使用GetCharacterIndexFromLineIndex获取所需行开头的索引,然后将CaretIndex设置为该值。
因为我真的不知道,你想要实现什么,另一种可能性是将LineUp和LineDown与GetFirstVisibleLineIndex和GetLastVisibleLineIndex结合使用。< / p>