在XAML ProgressBar的ValueChanged事件上绑定平滑动画

时间:2013-12-24 10:53:47

标签: c# wpf xaml animation

我搜索了很多关于这一点,但找不到我的确切案例的解决方案:

首先,我正在做一个小型下载管理器,我在 listview 元素中列出我的所有下载。 我的 Listview (名为downloadListXaml)有一些 GridViewColumn 绑定到我的元素(文件名,文件大小和进度条等内容)。 每个下载都由单独的线程管理,每个线程只更新绑定到 ProgressBar 进度值。

在我的初始项目中,每个线程都会在每次更改进度时刷新UI,但这会使整个UI在某个时候冻结。 所以我制作了一个单独的线程,每100ms刷新一次 Listview ,并且只有一些下载线程处于活动状态,这里是用于刷新的简单代码:

downloadListXaml.Items.Refresh();

这样可以工作,UI总是响应,但进度条动画只是每100毫秒跳到下一个值,不是很好看。

我想平滑地刷新它,我找到了一些解决方案,如下所示:How to update a progress bar so it increases smoothly?

该解决方案中的问题是我需要重新加入我的 ProgressBar xaml元素,但我只能访问我的对象绑定 ProgressBar < /强>

所以,我认为我唯一的解决方案是解决这个 XAML-Side ,将动画附加到 ProgressBar ValueChanged事件。

我是XAML的新手,我甚至不确定我能做到这一点。这可能吗?我该怎么做?

TL; DR版:当ProgressBar值绑定时,我不知道如何设置仅在 XAML 中工作的 ProgressBar 值更改到代码端托管对象。

1 个答案:

答案 0 :(得分:0)

我使用了这个答案中的ProgressBarSmoother实现:How to update a progress bar so it increases smoothly?

效果很好,但在我的情况下,它会尝试将ProgressBar从 0 设置为正确值。因此,我必须在绑定到 ListView 的对象中添加“最后绘制的值”,并将该值设置为当前进度值。

也许不是最好的解决方案,但看起来非常流畅,UI响应迅速!我喜欢那样:))