1

这是我的第一个问题,

但我没有找到我的问题的真正答案。

我从事可视化程序并使用 C# 和 WPF。

我需要画一个树状图。我实际上创建了 Rectangle 对象,然后将它们添加到 Canvas 中,效果非常好并且非常有用,因为我还向这些矩形添加了事件处理程序(鼠标单击)。

不过我的性能有问题。当我添加矩形并设置 Stroke 属性 (SolidColorBrush) 时,整个过程非常缓慢。如果没有这些笔画设置,速度还可以。

我已经通过将 Rectangle 对象添加到新创建的 Canvas 对象,然后将这个新的 Canvas 对象添加到原始 Canvas 对象来稍微提高了性能(因此并非所有矩形都是原始 Canvas 的直接子级,这应该有助于加快速度)。

所以我的问题是如何在不破坏速度的情况下向所有这些矩形添加 Stroke。

您可以在链接中找到“无描边”和“描边”树形图版本的比较。

没有描边的树形图

带有笔划的树状图

非常感谢您的帮助!

编辑:

好的,我找到了解决方案!

很抱歉先写在这里,但我已经搜索了几个小时来找到解决方案,但现在我发现问题出在我使用的 SolidColorBrush 上!

我有这样的事情:

public static SolidColorBrush TreeMapBorderBrush;

我使用这个 Brush 来设置应该添加到 Canvas 的每个 Rectangle 的 Stroke 属性。但这正是问题所在。

之前的代码是这样的:

rect.Stroke = Visualization_Helper.TreeMapBorderBrush;

我现在将其更改为:

rect.Stroke = Visualization_Helper.TreeMapBorderBrush.Clone();

所以我现在只在每个 Rectangle 上使用该 Brush 的副本,这样可以加快处理速度,就像没有 Stroke 一样(就像我的问题一样)!

仅供您参考!诡异的!

4

0 回答 0