我有一个WPF(.NET 3.5)控件,它可以渲染大约20000个矩形。 此MyControl源自Canvas。我将MyVisualsHost作为一个孩子放入MyControl,如下所示:
public class MyControl : Canvas
{
private readonly MyVisualsHost host = new MyVisualsHost();
private List<MyVisual> items = Enumerable.Range(0, 20000).Select(...).ToList();
public MyControl()
{
this.Children.Add(host);
}
}
所以,我将它放入Grid或Window.Content中,它可以非常快速地渲染项目(1秒)。 当我调整窗口大小时,矩形被重新排列并重新绘制(也在1秒内)。
但是当我将ComboBox与MyControl一起放入XAML时:
<Grid>
<ComboBox/>
<MyControl />
</Grid>
渲染重新排列减慢到5-10秒。
有人对此有任何想法吗? 提前谢谢。
P.S。您可以下载演示项目Here
答案 0 :(得分:1)
好。我已经成功了。每个视觉效果都是打开/关闭它自己的DrawingContext,这花费了太多时间。当我更改visual的渲染代码以使用VisualHost的DrawingContext实例作为参数传递给OnRender方法时,再次渲染20000个viual需要1-2秒。所以一切都很好,即使我因为使用这种渲染算法而失去了命中测试能力。