动态添加文本到画布的最快方法

时间:2011-03-24 13:00:49

标签: c# wpf

我制作了一个简单的图表,将堆叠面板放在画布上,然后根据给出的数据用标签填充堆栈面板。但是我对性能不是很满意。

如果我用列表框更改堆栈面板,而不是添加标签,那么渲染数据会更快吗?我需要显示的数据是来自大量字符串列表的子集。当我移动索引时,我必须清除所有列表框并用新数据填充它们。 或者有更快的方法吗?

我的所有字符串都是4个字符。是否可以将方向更改为垂直方向,以便每个列表框显示类似

的内容

A

A

A

A

C

C

C

C

d

d

d

d

...等 字符串是AAAA,BBBB,CCCC,DDDD。

2 个答案:

答案 0 :(得分:1)

您可能需要记住的一些事情:

  1. ListBoxes比StackPanels更重,ListBoxes通常包含StackPanel。
  2. 如果需要选择,则使用ListBoxes,如果不是,则使用ItemsControl,但ItemsControls是复合控件,因此比单独的容器更容易。
  3. 如果您只想要文本,请使用比Label更轻量级的TextBlock。 (TextBlock vs. Label
  4. How to create vertical text

答案 1 :(得分:1)

我认为您需要ItemsControl,而不是ListBox(无需选择项目)。

问题在于您的开销是否值得。 ItemsControl的权重比StackPanel更重(正如H.B.所说,它通常包含StackPanel)。使用ItemsControl的原因是UI虚拟化。如果许多项目滚动离开屏幕,ItemsControl通常(并非总是取决于控件模板)只会为屏幕上的项目生成视觉效果。这节省了大量的处理时间。

如果您想要原始速度,请创建DrawingVisual,在此视觉效果上调用RenderOpen(),使用DrawingContext绘制项目,然后在DrawingVisual内显示Canvas