2010-02-26 29 views
1

我试图让这个用户可以在RichTextBox之外按住Ctrl键单击滚动到RichTextBox中的最大的百分比滚动量基于相对于richtextbox顶部的鼠标y.position。下面是我目前使用的代码:需要有滚动到RichTextBox中的最大滚动量的百分比帮助(RichTextBox的是在ScrollViewer中)

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的,以使其向上滚动。我究竟做错了什么?

回答

1

更改第一计算到:

double d = (e.GetPosition(richtextboxScrollViewer).Y/richtextboxScrollViewer.ViewportHeight); 

为getPosition对富文本框中的结果考虑到了它的整个高度,包括“无形”(滚出)的一部分。所以百分比计算必须根据滚动查看器的“物理”高度来完成。

+0

不幸的是,它仍然显示相同的行为,只有小改进:( – Justin