Я реализовал альтернативное решение, которое может работать для вас.Шаги:
- Создайте UserControl (с нуля или с наследованием), чтобы вы могли записать некоторый код C-code в элемент управления.
- Создайте свойство DependencyProperty в коде для привязки данныххотите активировать.
- Используйте метод PropertyChangedCallback объекта DependencyProperty, чтобы реализовать выполнение того, что вам нужно сделать в коде с элементом управления.
- Привязать свойство DependencyProperty в XAML к данным, для которых вы хотите запустить.
Он не такой чистый, как DataTrigger, но он не намного хуже и работает хорошо (по крайней мере, для меня).
Объявление в XAML (DataContext уже установлен вобъект viewmodel):
<local:PlayButton IsPlaying="{Binding IsPlaying}"/>
Пример DependencyProperty, который вызывает раскадровки для изменения состояния:
// Use this to implement storyboard changing in W8 since triggers are not supported
public static readonly DependencyProperty IsPlayingProperty = DependencyProperty.Register(
"IsPlaying",
typeof(bool),
typeof(PlayButton),
new PropertyMetadata(null,
new PropertyChangedCallback(OnIsPlayingChanged)
));
private static void OnIsPlayingChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
PlayButton pb = (PlayButton)d;
bool isPlaying = (bool)e.NewValue;
if (isPlaying == false)
pb.GotoPlay.Begin();
else
pb.GotoPause.Begin();
}
public bool IsPlaying
{
get { return (bool)GetValue(IsPlayingProperty); }
set { SetValue(IsPlayingProperty, value); }
}