【问题标题】:Stop ProgressBar animation after Value = Maximum在 Value = Maximum 之后停止 ProgressBar 动画
【发布时间】:2013-03-26 16:51:56
【问题描述】:

我为进度条添加了动画。

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

下面是我的sn-p代码

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

</Trigger>

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

有人可以帮帮我吗?

非常感谢您的宝贵时间

【问题讨论】:

  • 标签不是搜索条件。标签用于分类。仅当问题与特定标签而不是一般标签相关时,才使用更具体的标签。

标签: wpf animation triggers


【解决方案1】:

一种更复杂的方法(但也更可重用)是使用DataTriggerMultiBindingIMultiValueConverter

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>

【讨论】:

  • 谢谢,这正是我所需要的。我已经创建了这个转换器并将 xaml 代码放在 style.xaml 中。当我更新进度条的值时,此数据触发器不会触发。我在转换器代码中放置了一个断点,但控制从未达到该点。我的进度条在用户控件中,在这种情况下我需要做任何不同的事情吗?
  • 每次更改 InotifyPropertyChanged 等值时是否需要调用 ImultiConverter?
  • 不,当任一属性的值发生变化时,它应该会自动工作。我假设触发器在 ProgressBar 的模板中。如果不是这种情况,您应该使用 ElementName 绑定,而不是使用 RelativeSource。
  • 我做了 ElementName 绑定,但问题是 ImultiValue Converter 只触发一次,即第一次使用未设置的值。当我更新进度条值时它没有触发。
  • 感谢 Abe 提供的帮助和时间。我没有提及RelativeSource或ElementName就让它工作了,只是 工作正常。
【解决方案2】:

而不是触发器,并且由于您已经有代码,您可以注册动画的completed event

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2017-01-08
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多