我希望能够从我的 ScrollViewer 中访问滚动条。
我认为它隐藏在 ScrollViewer 的模板中,有没有办法通过编程方式访问并获取对其的引用?
所以如果我有:
<ScrollViewer x:Name="myScrollViewer">
在代码后台,我想要这样做:
ScrollBar scrollBar = myScrollViewer.GetScrollBar();
(显然,我认为这不会像那样简单)
我希望能够从我的 ScrollViewer 中访问滚动条。
我认为它隐藏在 ScrollViewer 的模板中,有没有办法通过编程方式访问并获取对其的引用?
所以如果我有:
<ScrollViewer x:Name="myScrollViewer">
ScrollBar scrollBar = myScrollViewer.GetScrollBar();
我想我明白了......
myScrollViewer.ApplyTemplate();
ScrollBar s = myScrollViewer.Template.FindName("PART_VerticalScrollBar", myScrollViewer) as ScrollBar;
ControlTemplate
,它不包含可以查找的子元素。 - AnthonyWJonesScrollViewer
上调用ApplyTemplate()
才能找到滚动条。如果您将此答案中的代码从包含ScrollViewer
的控件的public override void OnApplyTemplate()
中调用,则不会产生任何结果,除非首先调用myScrollViewer.ApplyTemplate()
。 - zmechanicVisualTreeHelper.GetChild
方法遍历ScrollViewer
的可视树来查找ScrollBar
。VisualTreeEnumerator
代码。ScrollBar s = myScrollViewer.Decendents()
.OfType<ScrollBar>()
.FirstOrDefault(sb => sb.Name == "PART_VerticalScrollBar");
ScrollViewer
上调用 ApplyTemplate()
才能找到滚动条。如果您在包含 ScrollViewer
的控件的 public override void OnApplyTemplate()
中调用此答案中的代码,而没有先调用 myScrollViewer.ApplyTemplate()
,则不会产生任何结果。 - zmechanic