2

我编写了一个简单的日历控件来允许选择单日、周、月等。简单性来自于我自己并没有真正做任何绘图,而是选择创建一堆框和标签来充当日历的日期单元格。

选择日期或日期范围时,我需要突出显示该范围。这很容易通过遍历单元格并切换它们的样式来完成。[编辑:]但是,这似乎会导致延迟,在此期间首先绘制单元格,好像样式名称是空白的,然后用正确的样式重新绘制,尽管我从未明确地将样式设置为 null - - 我在“CalendarCell”和“CalendarCellSelected”之间交替。

如果这是 Windows 窗体,我会在父容器上调用 SuspendLayout,以确保仅在完成更新后重新绘制控件。我想知道的是 Flex 是否存在类似的解决方案。我想避免“手动”绘制整个日历,可以这么说,如果可能的话。

编辑:更改了问题描述以更准确地反映我所看到的。

4

3 回答 3

1

你在使用 callLater() 吗?

如果您使用 callLater() 它可能会改善您的视觉效果,因为它会批量更改,直到它需要绘制一个框架,或者您使用 validateNow() 或类似方法强制绘制一个框架。在你的情况下可能就足够了。

于 2008-11-03T13:50:39.720 回答
0

这可能不是您正在寻找的内容,但 Adob​​e 的 David Coletta 发布了一段视频,解释了他们在 Buzzword 中使用的 EventCoalescer,用于推迟更新应用程序 UI 特定区域的事件,直到用户停止将插入点移入文本,例如。

Hans Van de Velde 的这篇博文 也有类似的解决方案,以及它的实际代码。

于 2008-11-03T11:39:20.327 回答
0

你的日历控件是 UIComponent 吗?是否使用标准的失效方法,如 commitProperties()、updateDisplayList() 等?

您可能想要做的是保留将更改其样式的单元格的私有数组,然后在您的 commitProperties() 覆盖中进行实际的样式切换。我只是不确定 setStyle() 是否会触发 validateNow() 因为闪烁有点令人惊讶。

于 2008-11-05T01:43:27.067 回答