Justin
Justin

Reputation: 2479

Need help with scrolling to a percentage of richtextbox's maximum scroll amount (the richtextbox is in a scrollviewer)

I am trying to make it so that a user can ctrl-click outside of a richtextbox to scroll to a percentage of the richtextbox's maximum scroll amount based on the y.position of the mouse relative to the top of the richtextbox. Here's the code I'm currently using:

    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);
            }
        }
    }

Right now it seems to work until I scroll to the bottom and then I have to click past halfway up the richtextbox in order to make it scroll upwards. What am I doing wrong?

Upvotes: 1

Views: 1007

Answers (1)

Timores
Timores

Reputation: 14589

Change the first computation to:

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

The result of GetPosition on the rich text box takes into account its full height, including the "invisible" (scrolled out) part. So the percentage computation must be done according to the "physical" height of the scroll viewer.

Upvotes: 1

Related Questions