2014-04-02 87 views
3

我需要繪製許多矩形(〜50000)。目前我正在使用以下方法。在WPF中繪製數千個矩形

<ItemsControl ItemsSource="{Binding Elements}" IsHitTestVisible="False" Background="Transparent"> 

    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas IsItemsHost="True" 
        Background="Transparent" 
        Width="500" 
        Height="500"> 
      </Canvas> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="ContentPresenter"> 
      <Setter Property="Canvas.Left" Value="{Binding X}"/> 
      <Setter Property="Canvas.Bottom" Value="{Binding Y}"/> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 

    <ItemsControl.ItemTemplate> 
     <DataTemplate DataType="{x:Type models:Element}"> 
      <Rectangle Width = "{Binding Width}" 
         Height = "{Binding Height}" 
         Fill= "{Binding Brush}" 
         SnapsToDevicePixels="True" > 
      </Rectangle> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 

</ItemsControl> 

問題是需要很長時間來繪製這個數量的矩形。 有沒有更好的方法來繪製大量的形狀?

+1

我會擺脫綁定和手動的將矩形放入畫布中 – thumbmunkeys

回答

3

Wpf具有非常低效的渲染引擎,並且50000個形狀對於它來說太多了,即使沒有綁定開銷。

採取在本文檔短期看:WPF rendering system

相反,考慮到使用繪圖API,如Direct2D的,這是compareably以及訪問來自WPF:Direct2D with WPF