我正在努力使用户可以在richtextbox外部按住Ctrl键单击滚动到richtextbox的最大滚动量的百分比,该百分比基于鼠标相对于richtextbox顶部的y.position。这是我目前正在使用的代码:
private void MainWindow_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (Keyboard.Modifiers == ModifierKeys.Control)
{
if (!richTextBox1.IsMouseOver)
{
double d = (e.GetPosition(richTextBox1).Y / richTextBox1.ActualHeight);
if (d > 1) { d = 1; }
d = (richtextboxScrollViewer.ExtentHeight * d);
richtextboxScrollViewer.ScrollToVerticalOffset(d);
}
}
}
现在它似乎工作,直到我滚动到底部,然后我必须点击上一半的richtextbox,以使其向上滚动。我做错了什么?
答案 0 :(得分:1)
将第一个计算更改为:
double d = (e.GetPosition(richtextboxScrollViewer).Y / richtextboxScrollViewer.ViewportHeight);
富文本框上的GetPosition结果考虑了其完整高度,包括“不可见”(向外滚动)部分。因此,百分比计算必须根据滚动查看器的“物理”高度来完成。