首页 > 解决方案 > 如何在 WPF 中平滑地将绑定的属性值从旧值设置为新值

问题描述

如何从绑定属性的先前值平滑地动画到它的新值?

假设我们有以下 Canvas 和 Line。

<Canvas>
    <Line 
        Canvas.Top="0"
        Stroke="#887FFF00"
        StrokeThickness="2"
        X1="0" Y1="0"
        X2="0" Y2="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType=Canvas}}"
        Canvas.Left="{Binding Position}"
        >
    </Line>
</Canvas>

线的水平位置由绑定到 Canvas.Left 附加属性的 Position 属性确定。当位置从 100 变为 200 时,我想将线的位置从其先前的值平滑地动画到它的新值。

我该怎么做呢?

标签: wpfxaml

解决方案


到目前为止,在 wpf 中平滑地为属性设置动画的最简单方法是使用动画。

不过,根据您的要求,动画有一些棘手的地方。

您不能在动画上绑定“from”或“to”,因此这将涉及在代码中创建动画。

您需要一个依赖属性,因此需要一个依赖对象来为值设置动画。

您可以考虑制作将位置公开的视图模型到依赖对象中。然后,您可以在需要对其进行动画处理时在代码中创建一个新动画,并将您的绑定保留在那里。

或者......您可以将故事板定义为资源并在代码中更改它以制作动画。

像这样https://social.technet.microsoft.com/wiki/contents/articles/31191.wpf-tips-animating-a-viewmodel.aspx

也许你不喜欢把 viewmodel 变成一个依赖对象。

如果您对视图中的一些“代码隐藏”感到满意,那么这就是一个依赖对象。您也可以将依赖属性添加到您的窗口。将其绑定到 Position ,然后为您的行的 canvas.left 或该行绑定到的另一个依赖项属性设置动画。


推荐阅读