在Value = Maximum之后停止ProgressBar动画

时间:2013-03-26 16:51:57

标签: wpf animation triggers

我为进度条添加了动画。

我试图在最大填充后停止动画(每次更改)。我根据需要处理的文件数从代码隐藏生成进度条最大值。

以下是我的代码段

<Trigger Property="Value" Value="10">
    <Setter Property="Visibility" TargetName="Animation" Value="Collapsed"/>

</Trigger>

当进度条的最大值为10时,上面的触发器有效,但我的问题是如何将此值更新为动态生成的最大值。

有人可以帮助我吗?

我非常感谢你的时间

2 个答案:

答案 0 :(得分:2)

执行此操作(但也更具可重用性)的更复杂方法是​​使用DataTrigger MultiBindingIMultiValueConverter

public class EqualsConverver : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, 
        object parameter, CultureInfo culture)
    {
        if (values.Length < 1)
            return Binding.DoNothing;

        var obj = values[0];
        for (int i = 1; i < values.Length; ++i)
        {
            if (!obj.Equals(values[i]))
                return false;
        }

        return true;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, 
        object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

然后你的触发器看起来像:

<DataTrigger Value="True">
    <DataTrigger.Binding>
        <MultiBinding Converter="{StaticResource equalsConverter}">
            <Binding Path="Value" RelativeSource="{RelativeSource Self}" />
            <Binding Path="Maximum" RelativeSource="{RelativeSource Self}" />
        </MultiBinding>
    </DataTrigger.Binding>
    <Setter Property="Visibility" TargetName="Animation" Value="Collapsed"/>
</DataTrigger>

答案 1 :(得分:1)

而不是触发器,并且因为你已经有了代码,你可以注册动画的completed event