如何在WPF中绘制大量可点击的矩形?

时间:2018-01-08 16:15:17

标签: c# wpf canvas memory-management drawing

我正在制作一个基本的思维导图程序但是我没有很多使用WPF绘图的经验。我希望能够在其上绘制带有文本的矩形,并且我希望能够单击矩形来更改文本。 截至目前,我有:

private void DrawSubject(int curve, double X, double Y, Brush clr)
        {
            Rectangle rect = new Rectangle();
            rect.Width = 62;
            rect.Height = 38;
            rect.Fill = clr;
            rect.Stroke = line;
            rect.RadiusX = rect.RadiusY = curve;
            Canvas.SetLeft(rect, X);
            Canvas.SetTop(rect, Y);
            mindmap.Children.Add(rect);
        }

SolidColorBrush line = new SolidColorBrush(Color.FromArgb(255, 21, 26, 53));

minmap是画布的名称。我希望能够绘制很多这些呈现思维导图分支的矩形。但是,当我在随机位置上绘制10,000个这些时,诊断工具中的进程内存在绘制完所有内容后上升了100 MB。我这样做是为了模拟一个包含10,000个分支的思维导图。所以我想知道是否有办法减少这些矩形的已用内存? 或者使用DrawingVisual和grid.click事件更好,它通过将矩形的坐标放在List中来检查点击的位置是否与矩形的位置匹配?

1 个答案:

答案 0 :(得分:1)

我会尝试你所描述的DrawingVisual方法,如果证明性能代价高昂(我不知道DrawingVisual有多好)你可以考虑将OpenGLDirectX嵌入到你的应用程序中并渲染他们通过那个。

但是光线追踪绘制的视觉效果,而不是为每个制作一个控制,绝对是你的规模。