CSharp - 在WPF中,C# 绘制数千个矩形

  显示原文与译文双语对照的内容

我需要画多个矩形( ~50000 ) 。 目前我正在使用以下方法。


<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>



问题是需要很长的时间来绘制这个矩形。 是否有更好的方法来绘制大量的形状?

时间: 原作者:

Wpf有一个非常低效的呈现引擎,50000个形状对于它来说太多了,即使没有绑定开销。

请简短查看这里文档: WPF呈现系统

相反,考虑使用 draw API,例如 Direct2D,它可以从WPF很好地访问: 使用WPF实现

...