Enough to call Children.Clear on a WPF canvas to get rid of old controls before adding new ones?
我正在试验wpf并重新实现我的旧迷宫屏幕保护程序。
我的代码基本上在画布上添加了一组图像,构建了一个网格,64x64像素的图像并排覆盖整个画布。然后我在迷宫中"动画化"移动,这应该是滚动迷宫,通过调整翻译转换,并交换出图像。
不过,我好像有点泄密。每当我调整窗口的大小时,我都希望重新构建图像组件,以便用更多或更少的图像再次覆盖表单。
如果我将窗体的左下角沿紧密的圆圈拖动,则重建部分将变得越来越慢。
要删除旧控件,我只需执行以下操作:
1 | _Canvas.Children.Clear(); |
够了吗?由于经济放缓,我想不是。
然而,由于迷宫目前不是"阿凡达"所"发现",所以迷宫图像是以25%的不透明度绘制的,我假设如果我不能移除它们,我会得到很多图像,但看起来也不是这样。
我正在缓存图像源,图像组件的创建方式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | _Images = new Image[(int)width, (int)height]; for (int x = -1; x < width - 1; x++) { for (int y = -1; y < height - 1; y++) { Image i = new Image(); i.Width = 64; i.Height = 64; i.Source = _Outside; Canvas.SetLeft(i, x * 64); Canvas.SetTop(i, y * 64); _Canvas.Children.Add(i); _Images[x + 1, y + 1] = i; } } |
之后,他们被分配图像如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Maze.Square sq = _Maze[_TopLeftMazeX + x, _TopLeftMazeY + y]; Image img = _Images[x + 1, y + 1]; if (sq.Seen) img.Opacity = 1.0; else img.Opacity = 0.25; switch (sq.Type) { case Maze.SquareType.Hallway: img.Source = _Hallway; break; case Maze.SquareType.Wall: img.Source = _Wall; break; case Maze.SquareType.Outside: img.Source = _Outside; break; } |
我还应该寻找什么?是否需要以任何方式处理图像组件?
调用