查找滚动条的宽度
Find width of a scrollbar
与 this question 相同,但适用于 UWP。特别是,我找不到任何 SystemParameters class,所以那里的答案对我来说不起作用。
也很重要:如果可能的话,我希望能够获得滚动条存在时的宽度。换句话说,有些情况下滚动条还不存在,但用户输入很可能会导致创建它。在这种情况下,我希望能够知道它的预期宽度 if/when 它被创建了。 (我意识到一些意想不到的事情可能会导致答案错误;没关系,只要我得到通常预期的答案即可。)
据我所知,除了自己挖掘属性之外没有更好的方法。在 UWP 中确实需要进行大量的黑客攻击。例如,看起来没有办法直接从 ScrollViewer 获取 ScrollBar(你也不能在模板上执行 FindName
甚至从它派生来使用 GetTemplateChild
),但是这些行应该解决这个问题:
var rootElement = (FrameworkElement)VisualTreeHelper.GetChild(scrollViewer, 0);
var scrollBar = (ScrollBar)rootElement.FindName("VerticalScrollBar");
您可以访问 ScrollBar 的 ActualWidth
属性,但如果它不可见,它将为零。幸运的是,我发现 MinWidth
包含正确的值。
您必须有一个可见的 ScrollViewer。
正如@Neme 的回答所说,您可以使用 VisualTreeHelper to retrieve the ScrollBar and then use 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.
检索它
与 this question 相同,但适用于 UWP。特别是,我找不到任何 SystemParameters class,所以那里的答案对我来说不起作用。
也很重要:如果可能的话,我希望能够获得滚动条存在时的宽度。换句话说,有些情况下滚动条还不存在,但用户输入很可能会导致创建它。在这种情况下,我希望能够知道它的预期宽度 if/when 它被创建了。 (我意识到一些意想不到的事情可能会导致答案错误;没关系,只要我得到通常预期的答案即可。)
据我所知,除了自己挖掘属性之外没有更好的方法。在 UWP 中确实需要进行大量的黑客攻击。例如,看起来没有办法直接从 ScrollViewer 获取 ScrollBar(你也不能在模板上执行 FindName
甚至从它派生来使用 GetTemplateChild
),但是这些行应该解决这个问题:
var rootElement = (FrameworkElement)VisualTreeHelper.GetChild(scrollViewer, 0);
var scrollBar = (ScrollBar)rootElement.FindName("VerticalScrollBar");
您可以访问 ScrollBar 的 ActualWidth
属性,但如果它不可见,它将为零。幸运的是,我发现 MinWidth
包含正确的值。
您必须有一个可见的 ScrollViewer。
正如@Neme 的回答所说,您可以使用 VisualTreeHelper to retrieve the ScrollBar and then use 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.