2011-02-02 48 views
0

我有一個呈現大約20000個矩形的WPF(.NET 3.5)控件。 此MyControl來自Canvas。我把一個MyVisualsHost作爲一個孩子到MyControl是這樣的:DrawingVisuals主機和佈局性能

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); 
    } 
} 

所以,我把它變成圖標或進入Window.Content,它使項目相當快(1秒)。 當我調整窗口大小時,矩形重新排列並重繪(也在1秒內)。

但是,當我把組合框到XAML與MyControl一起:

<Grid> 
    <ComboBox/> 
    <MyControl /> 
</Grid> 

渲染上重新排列減慢至5-10秒。

任何人有任何想法呢? 在此先感謝。

P.S.您可以下載演示項目Here

回答

1

好的。我管理它。每個視覺效果都是打開/關閉它自己的DrawingContext,並且花費太多時間。當我將Visual的渲染代碼改爲使用作爲OnRender方法參數傳遞的VisualHost的DrawingContext實例時,需要1-2秒才能再次渲染20000個VIual。所以現在一切都很順利,即使我因使用這種渲染算法而失去了命中測試功能。