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

时间:2014-10-01 12:28:28

标签: c# wpf scrollviewer

我试图获得控件顶部和垂直滚动条中间的像素距离(不是所有的滚动查看器,只有可以拖动以滚动控件的栏)。 我不明白我应该使用哪个属性。 这是我写的代码:

double barHeight = /*to do*/;
double barUpperEdge = scrollViewer.VerticalOffset;

double distance = barUpperEdge  + (barHeight/2);

另一个问题:scrollViewer.VerticalOffset的神经元素是哪一个?如果它不是像素我应该做什么演员?

1 个答案:

答案 0 :(得分:3)

您可以从IScrollInfo Interface计算该值。 ScrollViewer Class实现此接口并公开您需要使用的相关属性。据我所知,你需要使用三个属性:

  

ExtentHeight - 获取包含范围垂直大小的值。

     

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

     

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

为了进一步说明,viewportScrollViewer的可见区域相关,Extent表示可滚动区域的总大小。 VerticalOffset描述了可滚动内容的滚动量。使用这三个值,您应该能够计算与ScrollBar相关的所需值。尝试这样的事情:

double barHeight = ViewportHeight * scrollviewer.ActualHeight / ExtentHeight;

更新>>>

请注意,在计算中使用常量值通常是不好的做法。出于这个原因,Microsoft已经暴露了许多常见属性。在您的情况下,我相信您可以使用SystemParameters.VerticalScrollBarButtonHeight property,但您可能需要添加一些内容以适应Padding和/或Margin值:

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

你知道......我只是想到了某件事......你可能甚至能够从这些Height获得你所需的拇指SystemParameters。 ..你可以尝试SystemParameters.VerticalScrollBarThumbHeight Property,但我不认为它适用于自定义ScrollBar