2012-08-19 41 views
2

如何在属性绑定发生变化时开始故事板?当图像源发生变化时播放故事板

我的图像源每5秒更换一次(在我的ViewModel中),我想在图像变化时播放故事板。

<Grid> 
    <Image x:Name="image" Source="{Binding CurrentImage}"/>  
</Grid> 

回答

3

您通常会为一个事件添加一个EventTrigger,该事件在Source属性更改时触发。不幸的是,Image控件没有定义这样的事件,所以你就必须从图像派生来创建自己:

<local:MyImage Source="{Binding Image}"> 
    <local:MyImage.Triggers> 
     <EventTrigger RoutedEvent="local:MyImage.SourceChanged"> 
      <BeginStoryboard> 
       <Storyboard> 
        ... 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </local:MyImage.Triggers> 
</local:MyImage> 
+0

感谢:

public class MyImage : Image { public static readonly RoutedEvent SourceChangedEvent = EventManager.RegisterRoutedEvent( "SourceChanged", RoutingStrategy.Direct, typeof(RoutedEventHandler), typeof(MyImage)); static MyImage() { Image.SourceProperty.OverrideMetadata(typeof(MyImage), new FrameworkPropertyMetadata(SourcePropertyChanged)); } public event RoutedEventHandler SourceChanged { add { AddHandler(SourceChangedEvent, value); } remove { RemoveHandler(SourceChangedEvent, value); } } private static void SourcePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { Image image = obj as Image; if (image != null) { image.RaiseEvent(new RoutedEventArgs(SourceChangedEvent)); } } } 

现在,你可以在一个EventTrigger使用SourceChanged事件这个 :) – Ralt 2017-11-30 08:16:04

1

我认为你应该更好地向你的ViewModel添加一个事件,并在源代码发生变化时启动它。当然,在该事件中使用EventTrigger来执行Storyboard。

相关问题