我试图获得控件顶部和垂直滚动条中间的像素距离(不是所有的滚动查看器,只有可以拖动以滚动控件的栏)。 我不明白我应该使用哪个属性。 这是我写的代码:
double barHeight = /*to do*/;
double barUpperEdge = scrollViewer.VerticalOffset;
double distance = barUpperEdge + (barHeight/2);
另一个问题:scrollViewer.VerticalOffset
的神经元素是哪一个?如果它不是像素我应该做什么演员?
答案 0 :(得分:3)
您可以从IScrollInfo
Interface计算该值。 ScrollViewer
Class实现此接口并公开您需要使用的相关属性。据我所知,你需要使用三个属性:
ExtentHeight
- 获取包含范围垂直大小的值。
ViewportHeight
- 获取一个值,其中包含内容视口的垂直大小。
VerticalOffset
- 获取一个包含滚动内容的垂直偏移量的值。
为了进一步说明,viewport
与ScrollViewer
的可见区域相关,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
。