与this question相同,但对于UWP。特别是,我找不到任何SystemParameters类,所以答案在我的情况下不起作用。
同样重要的是:如果可能的话,我希望能够获得滚动条所具有的宽度(如果存在的话)。换句话说,存在滚动条尚不存在的情况,但是用户输入可能导致其被创建。在这种情况下,我希望能够知道创建时/期望的宽度。 (我意识到一些意想不到的事情可能会导致答案出错;只要我能得到通常预期的答案,那就没问题。)
答案 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。