Я хочу создать datatrigger, который делает мою страницу мигающей (от прозрачной до красной). Поэтому я создал DataTrigger, который слушает логический флаг в моей модели viewmodel. Этот флаг должен указывать, когда пользователю нужно напомнить. В этом случае моя страница должна мигать от прозрачного до красного.DataTrigger, похоже, не срабатывает
Я был уверен, что я правильно применил триггер данных, но мое приложение ничего не делает - никаких ошибок, не мигает ... Поэтому у меня должно быть что-то пропущено.
<Style x:Key="ReminderPage" TargetType="{x:Type ViewTemplates:TpApplicationBarView}" BasedOn="{StaticResource TpApplicationBarViewStyle}">
<Style.Triggers>
<!-- Reminder animation, when the time comes to remind the user -->
<DataTrigger Binding="{Binding IndicateReminderAnimation}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard x:Name="Blink">
<ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
AutoReverse="True"
From="Transparent"
To="Red"
Duration="0:0:1"
RepeatBehavior="Forever">
</ColorAnimation >
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding IndicateReminderAnimation}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
AutoReverse="False"
To="Transparent"
Duration="0:0:1">
</ColorAnimation >
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
Итак, что я сделал неправильно?
Update: я могу увидеть следующее сообщение в окне вывода:
System.Windows.Media.Animation Warning: 6 : Unable to perform action because
the specified Storyboard was never applied to this object for interactive control.;
Action='Stop'; Storyboard='System.Windows.Media.Animation.Storyboard';
Storyboard.HashCode='61356140'; Storyboard.Type='System.Windows.Media.Animation.Storyboard';
TargetElement='System.Windows.Media.Animation.Storyboard'; TargetElement.HashCode='61356140';
TargetElement.Type='System.Windows.Media.Animation.Storyboard'
UPDATE2: После прибегая к помощи Arround я узнал, что это проблема с UI Thread. Поэтому я сделал вызов диспетчера всякий раз, когда устанавливал связанное свойство. Но даже с этим трюком нет цветовой анимации. Но ошибка в выходном окне, похоже, исчезла. Итак, я ищу дополнительные идеи о том, как исправить анимацию.
Update3: Как правило, проблема связана с настройкой цвета фона на странице. Но это действительно странно. Страница помещается в навигационную панель. Установка цвета фона в навигационном кадре изменит цвет приложения, но установка цвета фона на странице (даже без анимации) ничего не изменит.
Вы внедрили 'INotifyPropertyChanged' для свойства' IndicateReminderAnimation'? Вы проверили окно вывода в VS во время выполнения, есть ли какие-либо ошибки привязки? – nemesv
hm. Я внедрил INotifyPropertyChanged. Но я посмотрел на результат и произошла следующая ошибка: System.Windows.Media.Animation Warning: 6: Не удалось выполнить действие, потому что указанный Storyboard никогда не применялся к этому объекту для интерактивного управления; Действие = «Стоп»; StoryBoard = 'System.Windows.Media.Animation.Storyboard'; Storyboard.HashCode = '61356140'; Storyboard.Type = 'System.Windows.Media.Animation.Storyboard'; TargetElement = 'System.Windows.Media.Animation.Storyboard'; TargetElement.HashCode = '61356140'; TargetElement.Type = 'System.Windows.Media.Animation.Storyboard ' – BitKFu