2011-04-20 1 views
4

두 개의 항목이있는 목록 상자가 있습니다. 스크롤 막대가 표시되지 않을 때까지 모든 것이 완벽하게 표시되지만 스크롤바가 나오면 ItemContainerGenerator는 null을 반환합니다.ListBox ItemContainerGenerator는 listbox에 항목이있는 경우에도 null을 반환합니다.

일부 블로그를 읽고 그것이 vertualization stackpanel 때문일 수 있음을 발견했습니다. 만약 내가 그때 그것을 작동하지 않을 수 있지만 내 경우에는 너무 많은 무거운 덜 효율적으로 목록 상자를 만들 것입니다 해제합니다.

<ListBox x:Name="EventListBox" 
      DockPanel.Dock="Top" 
      Margin="5,5,5,5" 
      FocusVisualStyle="{x:Null}" 
      ItemsSource="{Binding EventModelViewCollectionView}" 
      Style="{StaticResource DefaultListBoxStyle}" 
      ItemTemplate="{StaticResource EventTemplate}" 
      SelectedItem="{Binding EventModelViewCollection.SelectedItem}" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
      ScrollViewer.VerticalScrollBarVisibility="Auto" 
      ScrollViewer.CanContentScroll="True" 
      ScrollViewer.IsDeferredScrollingEnabled="False" 
      ScrollViewer.ScrollChanged="EventScrollViewer_ScrollChanged" 
      IsSynchronizedWithCurrentItem="True" 
      Loaded="ListBox_Unloaded"> 

이 null을 반환 : 여기

은 목록 상자에 대한 코드입니다.

여기에서 firstContainer는 첫 번째 listbox 요소 여야합니다. itemsControl이 정확하고 firstContainer가 null 일 때 항목이 있는지 확인했습니다.

DependencyObject firstContainer = itemsControl.ItemContainerGenerator.ContainerFromIndex(0); 

한 매우 눈여겨볼 것은 더 : 나는 ItemsControl에에 거기 (8 개) 목록 상자 항목을 보았다. ItemContainerGenerator 상태가 * 컨테이너가 생성 됨 *

왜 반환하지 않는지 알 수 없음 ItemsContainer 생각들 ??

+0

나는 다음 링크를 통과했다 : http://drwpf.com/blog/2008/07/20/itemscontrol-g-is-for-generator/ – Rohit

답변

4

가상화는 표시되는 경우에만 listboxitems가 생성된다는 것을 의미합니다. 따라서 ItemContainerGenerator를 사용하여 생성되지 않은 (보이지 않는) 목록 상자 항목을 가져올 수 없습니다.

정말 목록 상자 항목이 필요합니까? 목록 상자가 데이터 기반이므로 데이터를 직접 사용하는 것처럼 보입니다.

+0

나는 똑같은 대답을하려고했다. 너는 말했다. :) .. 글쎄, 실제로 사용자 지정 드래그 ~ 드롭 지원을 제공하는 항목이 필요합니다. – Rohit

+0

위의 문제를 해결할 수는 있지만 문제가 하나 더 있습니다. 가상화가 true 인 경우 ScrollViewer - ViewPortHeight가 4.0이됩니다 (그러나 목록 상자의 실제 너비는 이보다 훨씬 크다). 이 문제를 해결할 수있는 방법이 있습니까? – Rohit

+0

모든 목록 상자 항목의 전체 높이를 알고 싶습니까? 목록 상자가 가상화 된 경우 보이지 않는 항목이 생성되지 않으므로 알 수 없습니다. 모든 항목의 높이가 동일한 경우 1 개의 항목 * 수에 대한 높이를 얻을 수 있습니다. –