2011-01-15 5 views
0

Я заметил очень странное поведение: в моем телефоне Windows 7 У меня есть ListBox, который может содержать что-либо от 1-2 до 2-300 элементов. Я заметил, что, когда количество элементов велико (не уверены в количестве, но точно> 150 элементов), событие OnSelectionChanged не поднимается.Событие ListBox OnSelectionChanged перестает работать с «многими» элементами

Это XAML моего ListBox

<ListBox ItemsSource="{Binding Path=Posts}" ItemTemplate="{StaticResource IconsWithText}" 
     ScrollViewer.VerticalScrollBarVisibility ="Disabled" 
     SelectionChanged="ListBox_SelectionChanged" > 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

И шаблон для ItemTemplate является:

<DataTemplate x:Name="IconsWithText"> 
    <Grid x:Name="ThumLink" Width="160" Height="140" Margin="10" Background="#FF666666"> 
     <Image Source="Resources/Images/All.png" Visibility="{Binding Path=VisibilityAll}" /> 
     <Image delay:LowProfileImageLoader.UriSource="{Binding Picture}" 
       Visibility="{Binding Path=VisibilityPic}" 
       Stretch="UniformToFill" VerticalAlignment="Top" HorizontalAlignment="Left" /> 
     <Border x:Name="border" VerticalAlignment="Bottom" Background="#d9ffffff" Height="62" BorderBrush="Black" Visibility="{Binding Path=VisibilityPic}" > 
      <TextBlock x:Name="textBlock" Text="{Binding Title}" VerticalAlignment="Top" TextWrapping="Wrap" MaxHeight="60" Style="{StaticResource PhoneTextSmallStyle}" 
       Foreground="Black" FontSize="20" Margin="4,1,4,0" Height="62"/> 
     </Border> 
    </Grid> 
</DataTemplate> 

Является ли это ошибка или я сделал что-то не так? Я был в отладке, и обработчик события никогда не вызван, но он работает, когда элементов не так много.

Simone

+0

Возможно, вы захотите показать нам «ListBox» xaml. Вы бы, например, подавали 'StackPanel' в свой' ItemPanelTemplate', потому что это не получилось бы с таким количеством элементов. – AnthonyWJones

+0

Добавил код ... да, используя StackPanel ... почему он не работает? Ошибка? Любое обходное решение? – CodeClimber

+0

Использует ли виртуализационная панель лучше? – CodeClimber

ответ

1

Проблема с использованием простой StackPanel является то, что все визуальный объект будет создан и добавлен к StackPanel который будет очень дорогим с точки зрения памяти и может споткнуться других ограничений в системе визуализации.

Try изменения в: -

<VirtualisingStackPanel Orientation="Horizontal" /> 

До сих пор, хотя я не был в состоянии воспроизвести вашу проблему с 300 пунктов даже при использовании простой StackPanel.

+0

попробовал это, но ничего не меняет – CodeClimber

+1

Также необходимо было добавить VirtualizingStackPanel.VirtualizationMode = «Переработка» в ListBox, чтобы заставить его работать с моим длинным списком объектов (теперь он вырос до 400+ предметов) – CodeClimber