2015-03-19 96 views
0

WPF 4.5/C#如何在WPF ContentControl中查找ScrollViewer?

我有一个应用程序,我有几个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>

回答

1

查找到VisualTreeHelper

使用类,你可以看看元素的孩子;例如:

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(); 
    } 
} 
+0

这很好。谢谢! – Joey 2015-03-19 22:48:39