更改UI以响应Storyboard.Completed事件。我们需要BeginInvoke吗?

时间:2011-08-03 10:46:36

标签: windows-phone-7

我有一个ContentPresenter,它可以在两种状态(“编辑器”和“查看器”)之间切换。状态具有不同的高度和不同的Content和ContentTemplate属性值。

在一个状态更改中,我通过播放Storyboard来调整控件的大小,并对Storyboard.Completed事件做出反应,我更改了内容/模板属性。

基本上没问题,除了我偶尔会发现闪烁。在调试器中播放时,我发现在Completed处理程序中修改上面的属性可能会导致奇怪的屏幕效果(屏幕的一部分为空,额外的阴影,线条等),用户会将其视为闪烁。

但是,每当我使用Dispatcher.BeginInvoke()推迟ContentPresenter更改时,问题似乎就会消失。 (需要更多测试。)

有人有解释吗?在网络上你会发现许多代码示例在Storyboard.Completed处理程序中执行UI更改,因此我觉得它有点奇怪。

1 个答案:

答案 0 :(得分:0)

我怀疑它可能更多是由于时间要求而不是需要在UI线程上。尝试在更改内容/模板属性之前暂停一会儿,而不是使用Dispatcher.BeginInvoke()。如果闪烁消失了,那么也许在内容忙于在故事板中调整自身时尝试更改这些属性是罪魁祸首 - 可能指定固定大小或以其他方式禁用故事板中的常量大小调整将有所帮助。这只是一个猜测,我必须看到一个样本来真正解决它。如果您可以制作一个小样本来重现它,我很乐意看一下。