如何在滚动查看器中获取可拖动条的高度

本文关键字:获取 拖动 高度 滚动 | 更新日期: 2023-09-27 18:25:09

我正在尝试获取控件顶部和垂直滚动条中间之间的像素距离(不是所有的滚动查看器,只有可以拖动来滚动控件的条)。我不知道该用哪处房产。这是我写的代码:

double barHeight = /*to do*/;
double barUpperEdge = scrollViewer.VerticalOffset;
double distance = barUpperEdge  + (barHeight/2);

另一个问题是:scrollViewer.VerticalOffset的测量单位是什么?如果它不在像素中,我该怎么做?

如何在滚动查看器中获取可拖动条的高度

您可以从IScrollInfo接口计算该值。ScrollViewer类实现了这个接口,并公开了您需要使用的相关属性。据我记忆所及,您需要使用三种属性:

ExtentHeight-获取一个值,该值包含数据块的垂直大小。

ViewportHeight-获取一个值,该值包含内容视口的垂直大小。

VerticalOffset-获取一个值,该值包含滚动内容的垂直偏移量。

为了进一步解释,viewportScrollViewer的可见区域有关,而Extent表示可滚动区域的总大小。VerticalOffset描述了可滚动内容已经被滚动的量。使用这三个值,您应该能够计算出与ScrollBar相关的所需值。试试这样的东西:

double barHeight = ViewportHeight * scrollviewer.ActualHeight / ExtentHeight;

更新>gt>

请注意,在计算中使用常数值通常是不好的做法。正是出于这个原因,微软公开了许多常见的属性。在您的情况下,我相信您可以使用SystemParameters.VerticalScrollBarButtonHeight属性,尽管您可能需要添加一些内容来适应Padding和/或Margin值:

double barHeight = ViewportHeight * (scrollviewer.ActualHeight -  2 * 
    SystemParameters.VerticalScrollBarButtonHeight) / ExtentHeight;

你知道。。。我刚刚想到了一件事。。。您甚至可以从这些SystemParameters中获得所需的拇指Height。。。您可以尝试SystemParameters.VerticalScrollBarThumbHeight属性,尽管我认为它不能与自定义ScrollBar s一起使用。