В моей модели просмотра у меня есть таймер, который должен заставлять фон границы мигать каждые 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. Но я не могу заставить его работать, привязав его к своей собственности.
EDIT:
Я установил текст данных следующим образом:
d:DataContext="{d:DesignInstance local:ItineraryViewModel}"
Кроме того, у меня есть множество других отлично работающих данных, таких как данные для отображения и команды для кнопок. Но я просто не могу заставить триггер выполнить сюжетную линию.
Метод ShowInfocenterIfAnyItinirary()
выполняется таймером, запущенным в модели представления.
Код таймера:
private readonly Timer _timer = new Timer();
public ItineraryViewModel()
{
_timer.Interval = 5000;
_timer.Elapsed += ShowInfocenterIfAnyItinirary;
_timer.Start();
}
РЕДАКТИРОВАТЬ 2:
Я отложил запуск анимации при запуске программы. Я обнаружил, что анимация запускается, но только один раз. Я не видел его раньше, потому что окно начинает сворачиваться.
Почему он запускается только один раз, независимо от того, сколько раз происходит событие запуска?