如何在C#中找到ScrollViewer的垂直滚动条宽度

28

我有一个ScrollViewer,在其中显示垂直滚动条,现在当系统分辨率改变时,我想获取滚动条的宽度。我查看了StackOverflow文章,他们提到检查SystemParameters.ScrollWidth属性,但是我没有从中获得任何帮助。请问有人能帮我解决这个问题吗?任何答案都将不胜感激。


2
检查以下代码,这将为您提供默认的滚动条宽度: double scrollBarwidth = SystemParameters.VerticalScrollBarWidth;顺便问一下,你为什么要查找它,无论如何VerticalScrollBarWidth的默认值是17。 - SharpUrBrain
@SharpUrBrain:是的,我已经检查过了,它给出的是17像素,但我在想它是否会根据DPI设置而改变,所以我一直在寻找它。 - user701677
2个回答

49

17
如果您需要用XAML表达它,可以这样做:<ColumnDefinition Width="{x:Static SystemParameters.VerticalScrollBarWidth}" />。 - Darren
6
因为值是 double,但 ColumnDefinition 需要的是 GridLength,所以我遇到了一个转换异常。我使用的解决方案是:<ColumnDefinition Width="{Binding Source={x:Static SystemParameters.VerticalScrollBarWidth}}}"/>。 - Melvyn

12

我不确定这是否是正确答案。每个WPF控件都可以重新设计,即使是滚动条。因此,SystemParameters.VerticalScrollBarWidth仅在用作默认滚动条时有效。正确的解决方案是在可视树中查找垂直滚动条并测量其ActualWidth。这是最精确的度量值。


你会如何在XAML中实现这个? - Grubsnik
@Grubsnik 或许可以通过绑定到一个你将要创建的属性来解决问题...目前没有直接的解决方案浮现在脑海中。 - Noctis
如果您可以提供XAML代码,我可以尝试编写它。这是一个定制的解决方案,所以很难立即给出答复。 - Patrik
@Patrik 谢谢你的提供,但是这个 XAML 代码和项目已经在我脑海中消失了。我甚至都记不起当时我试图解决什么具体问题了。 - Grubsnik
我想通过滚动条的宽度来偏移另一个UI元素,如果可见性发生变化。为此,我创建了几个转换器,一个将double转换为带有掩码(top、right等)的厚度,第二个从这个转换器派生,取一个scrollviewer并传入滚动条的宽度。 - Billy Jake O'Connor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接