2015-02-24 58 views
2

對不起,我的英語。在XAML 在CS ...Windows Phone 8.0列表框Out of Memory Extension

<Button Content="Add More" Width="160" Click="Button_Click_2"/> 
<ListBox x:Name="list"/> 

...

...

for (int i = 0; i < 20; i++) 
      { 
      list.Items.Add(new Image { Source = new BitmapImage { UriSource = new Uri("http://pravda-team.ru/eng/image/photo/4/7/4/73474.jpeg") } }); 
      } 

...

此: 我'執行下一個代碼代碼工作,但如果我點擊按鈕幾次,有一個例外「內存擴展」 我試圖使用垃圾收集器和自動緩存,但錯誤仍然存​​在。 我趕上下一個屏幕快照這個擴展: enter image description here

+0

你用什麼手機進行測試?我在我的Lumia 730上試了一下。點擊了按鈕數百次,沒有注意到這樣的錯誤。圖像(一個圖像,但很多次)加載一切工作快速,平穩。 – 2015-02-24 13:39:58

+0

我正在Lumia 620上進行測試。爲了簡化捕獲異常,您必須在文件App.cs中添加以下代碼: private void Application_UnhandledException(object sender,ApplicationUnhandledExceptionEventArgs e) { MessageBox.Show(e.ExceptionObject .Message.ToString()); (Debugger.IsAttached) { Debugger.Break(); } } – Georgy 2015-02-25 09:16:28

+0

是的,我測試了它。看看我的答案。 – 2015-02-25 09:17:54

回答

2

我認爲當你ListBox裏面另一個ScrollViewerStackPanel有可能發生。通常ListBox有其自己的ScrollViewer,它只呈現當前可見的項目。但是,如果您將ListBox放置在ScrollViewer內,則必須呈現整個ListBox,並且您將達到內存異常。

這種佈局可能會有問題:

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <Button Content="add more" 
      Grid.Row="1" Click="Button_Click"/> 
    <ListBox x:Name="list1" Grid.Row="0"/> 
</StackPanel> 

但是這一次將正常工作,快速,平穩:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <ListBox x:Name="list1" Grid.Row="0"/> 
    <Button Content="add more" 
      Grid.Row="1" Click="Button_Click"/> 
</Grid> 

如果你希望你的ListBox正常滾動,其規模必須加以限制。你可以將它放置在Grid佈局中,但是設置硬編碼高度也可以。 ListBox必須知道其視口的大小以優化項目渲染。

+0

謝謝!你是對的! – Georgy 2015-02-25 09:31:58