开发者

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

开发者 https://www.devze.com 2022-12-21 04:45 出处:网络
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

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?


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消