2013-02-13 41 views
1

我試圖訪問下面的XAML中名爲'ScrollViewerItems'的ScrollViewer,並在後面的代碼中使用它。該名稱似乎並未被識別,可能是因爲它嵌入在ItemsControl中。我不需要指定的訪問權限,但是如何在代碼後面訪問ItemsControl的ScrollViewer?如何訪問ItemsControl中的ScrollViewer

<ItemsControl x:Name="EnteredItemsView" ItemsSource="{Binding LineItems}" VirtualizingStackPanel.IsVirtualizing="True" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.Template> 
     <ControlTemplate> 
      <ScrollViewer x:Name="ScrollViewerItems" Focusable="False"> 
       <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> 
      </ScrollViewer> 
     </ControlTemplate> 
    </ItemsControl.Template> 
    <ItemsControl.ItemTemplate> 
    ... 
+0

您可以使用可視化樹幫手還是可以的或templatedchild – JSJ 2013-02-13 15:08:19

回答

3

的ScrollViewer中是ItemsControl的視覺孩子:

var scrollViewer = 
    VisualTreeHelper.GetChild(EnteredItemsView, 0) as ScrollViewer; 

注意ItemsControl的必須已經裝載,然後才能訪問的孩子。

您可以添加一個Loaded處理程序ItemsControl的

<ItemsControl Loaded="ItemsControlLoaded" ...> 

,您訪問的ScrollViewer

private void ItemsControlLoaded(object sender, EventArgs e) 
{ 
    var itemsControl = sender as DependencyObject; 
    var scrollViewer = 
     VisualTreeHelper.GetChild(itemsControl, 0) as ScrollViewer; 
} 
+0

指定索引的查詢超出範圍或索引處的子項爲空。如果VisualChildrenCount返回0,則不要調用此方法,表示Visual沒有子項。 EnteredItemsView.VisualChildrenCount爲0 FYI – kenny 2013-02-13 15:37:10

+0

您在加載ItemsControl之前調用了GetChild!看我的編輯。 – Clemens 2013-02-13 15:50:36

相關問題