ListBox上的AdornerLayer没有重绘

时间:2010-10-18 02:35:14

标签: wpf

在我的应用中,我使用来自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上的装饰器没有被重新绘制/动画?

0 个答案:

没有答案