Scrollbar Size in ScrollViewer

2019-07-26 10:47发布

How can I programatically determine the width or height of a Scrollbar in the ScrollViewer? Not the current size based on the current state of the ScrollViewer (since I can simply test the visibility of the scrollbar and calculate against the ViewerPortWidth/Height and the ScrollViewer ActualWidth/Height).

I need to know what size the Scrollbar's could be based on the templated width. The default is 18 (with a margin of -1). But we all know what could happen if I use the magic number of 18 in my calculations. Some of my users could template the Scrollbars in the ScrollViewer then I'd be screwed.

Thanks!

2条回答
等我变得足够好
2楼-- · 2019-07-26 11:02

You can use SystemParameters.ScrollWidth.

查看更多
对你真心纯属浪费
3楼-- · 2019-07-26 11:16

You can use Silverlight Toolkit's VisualTreeHelper in the following way:

var verticalScrollbar = view.GetVisualChildren().OfType<FrameworkElement>()
        .FirstOrDefault(e => e.Name == "VerticalScrollBar");
var horizontalScrollbar = view.GetVisualChildren().OfType<FrameworkElement>()
        .FirstOrDefault(e => e.Name == "HorizontalScrollBar");
var width = verticalScrollbar == null ? 0 : verticalScrollbar.ActualWidth;
var height = horizontalScrollbar == null ? 0 : horizontalScrollbar.ActualHeight;

where view is an instance of ScrollViewer (I guess you've got the instance).

查看更多
登录 后发表回答