我想从我的ScrollViewer中访问滚动条。
我认为它隐藏在ScrollViewer的模板中的某个地方,是否有办法让我访问,并以编程方式获得对它的引用?
所以如果我有
<ScrollViewer x:Name="myScrollViewer">
在后面的代码中,我想这样写:
ScrollBar scrollBar = myScrollViewer.GetScrollBar();
(显然,我认为这比这更棘手)
我想我明白了....
myScrollViewer.ApplyTemplate();
ScrollBar s = myScrollViewer.Template.FindName("PART_VerticalScrollBar", myScrollViewer) as ScrollBar;
您需要使用VisualTreeHelper.GetChild
方法遍历ScrollViewer
的可视化树以找到ScrollBar
。
由于该方法提供了非常低级的功能,并且在高级代码中使用它会很痛苦,因此您可能希望使用LINQ这样的包装器来可视化树。
从这篇博文中获取VisualTreeEnumerator
代码。
有了这个扩展类:-
ScrollBar s = myScrollViewer.Decendents()
.OfType<ScrollBar>()
.FirstOrDefault(sb => sb.Name == "PART_VerticalScrollBar");