如何以编程方式从ScrollViewer中提取滚动条

本文关键字:ScrollViewer 提取 滚动条 方式 编程 | 更新日期: 2023-09-27 18:06:22

我想从我的ScrollViewer中访问滚动条。

我认为它隐藏在ScrollViewer的模板中的某个地方,是否有办法让我访问,并以编程方式获得对它的引用?

所以如果我有

<ScrollViewer x:Name="myScrollViewer">
在后面的代码中,我想这样写:
ScrollBar scrollBar = myScrollViewer.GetScrollBar();

(显然,我认为这比这更棘手)

如何以编程方式从ScrollViewer中提取滚动条

我想我明白了....

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");