У меня есть прямоугольник, для которого я анимирую цвет фона.
Он должен меняться на зеленый при каждом увеличении определенного числа.И красный, когда он идет вниз.Если число какое-то время не меняется, оно медленно возвращается к своему стандартному цвету
Таким образом, анимация очень быстро меняет фон с серого на красный, а затем требуется несколько секунд, чтобы вернуться к серому.
Я добавил как DataTrigger, который привязан к 1 или -1 в зависимости от того, как изменилось число
Проблема в том, что если число продолжает расти, анимация не перезапускается.
например, если последовательность чисел пошла 1, 2, 3, 4, 5. Затем я хотел бы, чтобы анимация перезапускалась при каждом изменении числа
код, который я использую, ниже
<Rectangle.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding BidChangeDirectionIndicator}"
Value="-1">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="bidDownStory">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="#FF79797A" />
<EasingColorKeyFrame KeyTime="0:0:0.2"
Value="#FFF13B29" />
<EasingColorKeyFrame KeyTime="0:0:10.0"
Value="#FF79797A" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="#FF2B2B2B" />
<EasingColorKeyFrame KeyTime="0:0:0.2"
Value="#FF3F0606" />
<EasingColorKeyFrame KeyTime="0:0:10.0"
Value="#FF2B2B2B" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="bidDownStory" />
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
и ViewModel, к которой я привязываюсь, выглядит следующим образом
private int _bidChangeDirectionIndicator;
public int BidChangeDirectionIndicator
{
get { return _bidChangeDirectionIndicator; }
set
{
_bidChangeDirectionIndicator = value;
RaisePropertyChanged("BidChangeDirectionIndicator");
}
}
....
public void Update(RateInfo rateInfo)
{
if (rateInfo.Bid != Bid)
{
BidChangeDirectionIndicator = Math.Sign(rateInfo.Bid - Bid);
}
}
Метод вызывается при каждом изменении числа (это делается классом, который прослушивает внешний канал)