2013-06-05 38 views
1

我正在開發一個WPF應用程序,我需要在一個窗口中顯示7200個圖像。 每個圖像大小等於300x300。 我的代碼「*的.xaml」如下顯示:在WPF視圖中顯示很多圖像開銷太多內存

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 
     <ItemsControl ItemsSource="{Binding Results}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Vertical"/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid HorizontalAlignment="Center" VerticalAlignment="Center" Height="180"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="40" /> 
          <ColumnDefinition Width="180" /> 
          <ColumnDefinition Width="180" /> 
          <ColumnDefinition Width="180" /> 
          <ColumnDefinition Width="180" /> 
          <ColumnDefinition Width="180" /> 
         </Grid.ColumnDefinitions> 
          <Grid Grid.Column="0" Margin="2"> 
           <Label Content="{Binding Frame}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
          </Grid> 
          <Grid Grid.Column="1" Margin="2"> 
           <Grid.Background> 
            <ImageBrush ImageSource="{Binding FrameImage}"/> 
           </Grid.Background> 
           <Image Source="{Binding FrameImage}"/> 
          </Grid> 
          <Grid Grid.Column="2" Margin="2"> 
           <Grid.Background> 
            <ImageBrush ImageSource="{Binding FrameMatch}"/> 
           </Grid.Background> 
           <Image Source="{Binding FrameMatch}"/> 
          </Grid> 
          <Grid Grid.Column="3" Margin="2"> 
           <Grid.Background> 
            <ImageBrush ImageSource="{Binding ObjMatch}"/> 
           </Grid.Background> 
           <Image Source="{Binding ObjMatch}"/> 
          </Grid> 
          <Grid Grid.Column="4" Margin="2"> 

           <Image Source="{Binding ObjImage}"/> 
          </Grid> 
          <Grid Grid.Column="5" Margin="2"> 
           <Label Content="{Binding Fitness}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
          </Grid> 
         </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </ScrollViewer> 

的問題是程序消耗的要多的內存。 可以解決這個問題嗎? 任何人都可以給我一個解決方案嗎?

+1

嘗試「虛擬化」您的用戶界面http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel%28VS.95%29.aspx – jure

+0

您的聲明部分是「this問題」?我不相信「多少內存」是正確的陳述,可能應該是「我不喜歡它消耗多少內存,即使我知道所有這些都是需要的,因爲我需要加載至少7200 * 360K字節(〜 2.5GB)「。 –

+0

@AlexeiLevenkov現在我正在閱讀關於虛擬化用戶界面的內容,並感謝Reed Copsey在找到解決圖像資源問題的方法之前找到了答案。 –

回答

3

可以解決這個問題嗎?任何人都可以給我一個解決方案嗎?

不顯示7200 300x300圖像在同一時間。這遠遠超過任何顯示器能夠一次顯示,所以最好將其虛擬化,並只顯示屏幕上的圖像。

這可以通過使用VirtualizingStackPanel,或甚至使用bidirectional virtualization實現自定義控件來完成。