在我的应用中,我使用来自http://sachabarber.net/?p=639的CircularProgressBar。
在一个应用程序中,我将它放在AdornerLayer上,我从Image元素中获取它并按预期工作(即元素由计时器驱动的旋转动画)。
在另一个应用程序中,我将它放在AdornerLayer上,我从ListBox元素获取并显示但不是动画。当我调整窗口大小时,它确实会变为动画,我认为这意味着由于某种原因,当元素发生变化时,AdornerLayer不会被重绘(除非我强制刷新,例如通过调整窗口大小)。
当我按住Alt键时,它也是正确的动画(我没有理论来解释这一点)。
在这两种情况下,我都会使用此代码创建一个装饰器:
var adornerLayer = AdornerLayer.GetAdornerLayer(ListBoxDirOrImageElement);
if (null == adornerLayer)
return;
var vb = new Viewbox();
vb.Width = 16;
vb.Height = 16;
vb.Child = new CircularProgressBar();
var adorner = new UpperRightAdorner(ListBoxDir, vb);
adornerLayer.Add(adorner);
我在2个程序之间注意到的唯一区别是我正在装饰的元素(适用于Image,不适用于ListBox)。
为什么会出现这种情况以及如何解决这个或其他解释为什么ListBox上的装饰器没有被重新绘制/动画?