C# WPF文本框滚动线不更新(如果可见)
我的程序中有一个导航栏,允许你在我的文本框中导航不同的部分,但我的问题是,如果我滚动到的文本在屏幕上已经可见,这就不起作用了 就像在这个例子中,如果我尝试从第1节跳到第3节,它将无法工作,因为它已经可见 但是,在这个例子中,如果我跳到第3节,它可以正常工作,因为它还不可见 我使用的滚动功能非常简单:C# WPF文本框滚动线不更新(如果可见),c#,wpf,textbox,C#,Wpf,Textbox,我的程序中有一个导航栏,允许你在我的文本框中导航不同的部分,但我的问题是,如果我滚动到的文本在屏幕上已经可见,这就不起作用了 就像在这个例子中,如果我尝试从第1节跳到第3节,它将无法工作,因为它已经可见 但是,在这个例子中,如果我跳到第3节,它可以正常工作,因为它还不可见 我使用的滚动功能非常简单: if (nLine > 0 && nLine <= textBox.LineCount) textBox.ScrollToLine(nLine - 1);
if (nLine > 0 && nLine <= textBox.LineCount)
textBox.ScrollToLine(nLine - 1);
if(nLine>0&&nLine 0&&newLineValue可用于获取所需行开头的索引,然后将设置为该值
因为我真的不知道,你想实现什么,另一种可能是使用并与and结合使用。它不起作用的原因是ScrollToLine只做它在文档中所说的:“在指定的行索引中将行滚动到视图中。”。这意味着,如果它已经可见,它不会滚动!是的,谢谢Daniel。虽然可能是这样,但我正在尝试解决这个问题,但我会更新以反映这一点。:)我基本上允许用户使用导航栏滚动到文本文档的特定部分。为了方便用户,我始终希望该部分位于文档的顶部。可能值得一提的是,导航栏项目只包含行和节的名称。我能够使用您的第二个建议获得一个有效的解决方案。干杯。:)
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
}
}
}
}
}