2017-03-27 1 views
1

코드 숨김에서 목록 뷰의 scrollviewer에 액세스해야합니다. 여기 내 목록보기의 정의목록보기 코드의 스크롤 뷰어에 액세스하는 WPF

<ListView Grid.Row="1" ItemsSource="{Binding Path=SpecList, UpdateSourceTrigger=PropertyChanged}" 
          Name="mylistview" 
          ItemTemplate="{StaticResource SpecElementTemplate}" 
          Background="{StaticResource EnvLayout}" 
          ScrollViewer.HorizontalScrollBarVisibility="Visible" 
          ScrollViewer.VerticalScrollBarVisibility="Disabled" 
          ItemContainerStyle="{StaticResource MyStyle}" 
          BorderBrush="Blue" 
          BorderThickness="20" 
          Margin="-2"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 

가 어떻게이있는 ScrollViewer를 얻을 수있다?

는 감사

안드레아 ScrollViewer를 얻을 수있는 여러 가지 방법이 있습니다

답변

1

. 가장 간단한 해결책은 ListView의 첫 번째 자녀의 첫 번째 자녀를 얻는 것입니다.

// Get the border of the listview (first child of a listview) 
Decorator border = VisualTreeHelper.GetChild(mylistview, 0) as Decorator; 

// Get scrollviewer 
ScrollViewer scrollViewer = border.Child as ScrollViewer; 

두 번째 방법은 모든 어린이가있는 ScrollViewer를 찾기 위해 재귀 검사하는 것입니다 :이 this answer에 설명 된 것처럼,이 Border 내부 BorderScrollViewer를 얻을 것을 의미합니다. 이것은 매트 해밀턴 (Matt Hamilton)의 답변에 this question에 설명되어 있습니다. 이 기능을 사용하여 간단하게 ScrollViewer을 얻을 수 있습니다.

ScrollViewer scrollViewer = GetChildOfType<ScrollViewer>(mylistview); 

이 두 번째 솔루션은 훨씬 더 포괄적이고 당신의 ListView의 템플릿을 편집 한 경우에도 작동합니다.

1

VisualTreeHelper 클래스를 사용하여 모든 자식 컨트롤에 액세스합니다. 귀하의 경우에

Psudeo 코드 :

//Declare a scroll viewer object. 
ScrollViewer sViewer = default(ScrollViewer); 

//Start looping the child controls of your listview. 
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(YOUR_LISTVIEW_OBJECT.VisualParent); i++) 
{ 
     // Retrieve child visual at specified index value. 
     Visual childVisual = (Visual)VisualTreeHelper.GetChild(YOUR_LISTVIEW_OBJECT.VisualParent , i); 

     ScrollViewer sViewer = childVisual as ScrollViewer; 

     //You got your scroll viewer. Stop looping. 
     if (sViewer != null) 
     { 
      break; 
     }  
}