查找滚动条的宽度

时间:2016-12-22 09:23:01

标签: c# listview uwp windows-10-universal scrollviewer

this question相同,但对于UWP。特别是,我找不到任何SystemParameters类,所以答案在我的情况下不起作用。

同样重要的是:如果可能的话,我希望能够获得滚动条所具有的宽度(如果存在的话)。换句话说,存在滚动条尚不存在的情况,但是用户输入可能导致其被创建。在这种情况下,我希望能够知道创建时/期望的宽度。 (我意识到一些意想不到的事情可能会导致答案出错;只要我能得到通常预期的答案,那就没问题。)

2 个答案:

答案 0 :(得分:1)

正如@ Neme的回答所说,您可以使用VisualTreeHelper检索ScrollBar,然后使用ActualWidth属性来获取其宽度。

但是,如果您没有更改VerticalScrollBar的样式和模板,则VerticalScrollBar的宽度始终为 12 。您可以在ScrollBar styles and templates

中找到
<Style TargetType="ScrollBar">
    <Setter Property="MinWidth" Value="12" />
    <Setter Property="MinHeight" Value="12" />
    ...
</Style

对于VerticalScrollBar,其宽度不会更改,因此其ActualWidth始终为12.对于HorizontalScrollBar,其高度不会更改,因此其ActualHeight会始终为12.仅当我们更改滚动条的样式或模板时,这些值才会更改。在这种情况下,我们应该知道我们设置的宽度,或者我们可以使用VisualTreeHelper在运行时检索它。

答案 1 :(得分:0)

据我所知,除了自己挖掘房产之外别无他法。在UWP中你真的需要做很多黑客攻击。例如,看起来没有办法直接从ScrollViewer获取ScrollBar(你也不能在模板上GetTemplateChild或甚至从它派生来使用var rootElement = (FrameworkElement)VisualTreeHelper.GetChild(scrollViewer, 0); var scrollBar = (ScrollBar)rootElement.FindName("VerticalScrollBar"); ),但是这些行应该解决这个问题:

ActualWidth

您可以访问ScrollBar的MinWidth属性,但如果它不可见则为零。幸运的是,我发现{{1}}包含正确的值。

您必须拥有可见的ScrollViewer。