В моей модели представления у меня есть таймер, которому нужно, чтобы фон границы мигал каждые 5 минут.
Граница на мой взгляд:
<Border Name="btnBorder" Grid.Row="0" Grid.Column="0" Opacity="1" CornerRadius="10,10,0,0">
<Border.Style>
<Style TargetType="Border">
<Style.Setters>
<Setter Property="Background" Value="#e2e2e2"></Setter>
</Style.Setters>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ViewEventTrigger}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="00:00:00.000" Value="#e2e2e2"/>
<EasingColorKeyFrame KeyTime="00:00:00.500" Value="#163f6b"/>
<EasingColorKeyFrame KeyTime="00:00:01.000" Value="#e2e2e2"/>
<EasingColorKeyFrame KeyTime="00:00:01.500" Value="#163f6b"/>
<EasingColorKeyFrame KeyTime="00:00:02.000" Value="#e2e2e2"/>
<EasingColorKeyFrame KeyTime="00:00:02.500" Value="#163f6b"/>
<EasingColorKeyFrame KeyTime="00:00:03.000" Value="#e2e2e2"/>
<EasingColorKeyFrame KeyTime="00:00:03.500" Value="#163f6b"/>
<EasingColorKeyFrame KeyTime="00:00:04.000" Value="#e2e2e2"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
Недвижимость в представлении модели:
private string _viewEventTrigger = "";
public string ViewEventTrigger
{
get => _viewEventTrigger ?? (_viewEventTrigger = "");
private set
{
if (_viewEventTrigger == value)
return;
_viewEventTrigger = value;
OnPropertyChanged();
}
}
И метод, который должен запускать ... ну, триггер:
private void ShowInfocenterIfAnyItinirary(object sender, ElapsedEventArgs e)
{
ViewEventTrigger = "";
ViewEventTrigger = "True";
}
Я тестировал раскадровку, запустив ее с помощью MouseEnter. Но я не могу заставить его работать, привязав его к своей собственности.
РЕДАКТИРОВАТЬ:
Я устанавливаю текст данных следующим образом:
d:DataContext="{d:DesignInstance local:ItineraryViewModel}"
Кроме того, у меня есть много других привязок данных, которые работают нормально, например, данные для отображения и команды для кнопок. Но я просто не могу заставить спусковой крючок исполнять сказку.
Метод ShowInfocenterIfAnyItinirary()
выполняется таймером, запущенным в модели просмотра.
Код таймера:
private readonly Timer _timer = new Timer();
public ItineraryViewModel()
{
_timer.Interval = 5000;
_timer.Elapsed += ShowInfocenterIfAnyItinirary;
_timer.Start();
}
ИЗМЕНИТЬ 2:
Я отложил запуск анимации при запуске программы. Я обнаружил, что анимация ДЕЙСТВИТЕЛЬНО запускается, но только один раз. Раньше не видел, потому что окно начинает сворачиваться.
Почему он запускается только один раз, независимо от того, сколько раз происходит событие триггера?