2017-03-27 64 views
1

我需要從代碼隱藏中訪問listview的scrollviewer。 這裏是我的列表視圖的定義WPF訪問listview代碼隱藏的滾動查看器

<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中?

謝謝

安德烈

回答

1

有幾種方法來獲取ScrollViewer。最簡單的解決方案是獲得ListView的第一個孩子的第一個孩子。這意味着獲得BorderScrollViewer這個邊界內的像 this answer描述:

// 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。 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; 
     }  
}