WPF画布中有超过200万个矩形

时间:2013-03-27 02:33:21

标签: c# wpf

我正在为半导体晶圆图enter image description here

创建自定义控件

每个小矩形都需要满足以下要求; 1)显示索引的工具提示 2)可点击以包含或排除晶圆图定义。

在1400 x 1450芯片的情况下,晶片图中的芯片数量不会超过2百万。

在某些时候我需要在一个窗口中显示所有模具(大多数点击都会在缩放视图中发生)。

目前我正在使用Rectangle形状分别添加每个模具,并将工具提示的坐标信息(如(10,10)索引)存储为附加属性。

我对每个模具使用不同的风格;取决于模具的某些计算和位置。

DieStyle1 = new Style { TargetType = typeof(Rectangle) };
DieStyle1.Setters.Add(new Setter(Shape.FillProperty, Brushes.MediumSlateBlue));
DieStyle1.Setters.Add(new Setter(Shape.StrokeProperty, Brushes.White));
DieStyle1.Setters.Add(new EventSetter(MouseDownEvent, new MouseButtonEventHandler(DieStyle1_MouseDown)));

这种方法很慢并且也使用高内存。那么建议在WPF中实现这一目标的更好方法是什么?

1 个答案:

答案 0 :(得分:0)

在为圣诞树灯创建设计师时,我遇到了同样的问题。当你获得100多个项目时,使用UIElement或Shapes的速度太慢了。处理大量项目的最佳方法是使用双缓冲和您自己的图像托管缓冲区以及处理点击的结构。我发布了我的项目,这应该会给你一个良好的开端。它可以在以下位置获得: http://sourceforge.net/projects/xlightsdesigner/

您对Controls \ ChannelitemsCanvas.cs感兴趣。它可以根据您的需要进行修改,并使用四叉树存储矩形,以便快速确定点击事件。