我注意到一种非常奇怪的行为: 在我的Windows Phone 7中,我有一个ListBox,可以包含1-2到2-300个项目。 我注意到,当项目数量很大(不确定数字但确定> 150项)时,不会引发OnSelectionChanged事件。
这是我列表框的XAML
<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>
这是一个错误还是我做错了什么?我在调试中,事件处理程序永远不会被调用,但是当项目不多时它就可以工作。
西蒙
答案 0 :(得分:1)
使用普通StackPanel
的问题是所有可视对象都将被创建并添加到StackPanel
,这在内存方面将非常昂贵,并且可能会在渲染系统中超过其他限制
尝试更改为: -
<VirtualisingStackPanel Orientation="Horizontal" />
到目前为止,即使使用普通的StackPanel,我也无法使用300个项目重现您的问题。