如何在 WPF ContentControl 中找到 ScrollViewer?

How To Find ScrollViewer Inside of WPF ContentControl?

WPF 4.5/C#

我有一个应用程序,其中有多个 WPF Windows,每个都使用此自定义内容控件。我在 XAML 中这样使用它:

<ContentControl Name="myControl" Style="{StaticResource ReservedSpaceScrollBar}"

在后面的代码中,我需要能够访问里面的ScrollViewer,所以我可以调用.ScrollToTop()

我已经试过了,但没用:

((ScrollViewer)this.myControl.FindName("Scroll")).ScrollToTop();

...但是 .FindName 找不到 ScrollViewer。我究竟做错了什么?这是如何工作的?

样式的XAML如下...

   <Style TargetType="{x:Type ContentControl}" x:Key="ReservedSpaceScrollBar">
      <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="{x:Type ContentControl}">
               <ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" x:Name="Scroll" FocusVisualStyle="{x:Null}">
                  <Grid>
                     <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition Width="Auto" />
                     </Grid.ColumnDefinitions>
                     <ContentPresenter />
                     <Border Width="{x:Static SystemParameters.VerticalScrollBarWidth}" x:Name="Placeholder" Grid.Column="1" />
                  </Grid>
               </ScrollViewer>
               <ControlTemplate.Triggers>
                  <DataTrigger Binding="{Binding ComputedVerticalScrollBarVisibility, ElementName=Scroll}" Value="Visible">
                     <Setter TargetName="Placeholder" Property="Visibility" Value="Collapsed" />
                  </DataTrigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>

调查VisualTreeHelper

使用 class 你可以查看元素的子元素;例如:

var childCount = VisualTreeHelper.GetChildrenCount(this.myControl);

for (int i = 0; i < childCount; i++)
{
    var child = VisualTreeHelper.GetChild(this.myControl, i);

    if (child.GetValue(NameProperty).ToString() == "Scroll")
    {
        ((ScrollViewer)child).ScrollToTop();
    }
}