我创建了一个 XAML 文件中的动画故事板。该故事板在 Button.Click 上开始。但是为了停止动画,我正在尝试在代码后台中停止 storyboard。
代码没有抛出任何异常,但是当我的事件被触发时,动画仍然继续进行。
我认为问题在于 Stop 方法。Stop 需要同一对象来开始和停止动画。但是这里的 storyboard 是在 WPF xaml 中开始的,而我正在代码后台中停止它。
有什么解决办法吗?如何在代码后台获取 Xaml 对象或其他替代方案?
XAML 代码:
代码没有抛出任何异常,但是当我的事件被触发时,动画仍然继续进行。
我认为问题在于 Stop 方法。Stop 需要同一对象来开始和停止动画。但是这里的 storyboard 是在 WPF xaml 中开始的,而我正在代码后台中停止它。
有什么解决办法吗?如何在代码后台获取 Xaml 对象或其他替代方案?
XAML 代码:
<Canvas.Triggers>
<EventTrigger RoutedEvent="Button.Click" SourceName="ScanButton">
<EventTrigger.Actions>
<BeginStoryboard >
<Storyboard Name="MovingServer" Storyboard.TargetName="ImageMove" RepeatBehavior="Forever" >
<DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:2" From="30" To="300" BeginTime="0:0:0" />
<DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:5" From="300" To="300" BeginTime="0:0:5" />
<DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:2" From="300" To="600" BeginTime="0:0:7" />
<DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="0:0:2" From="1" To="0" BeginTime="0:0:7" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
后台代码:
private void EventPublisher_OnScanningFinish(object sender, EventArgs args)
{
Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate() { this.StopScanningAnimation(); });
}
private void StopScanningAnimation()
{
ServerView.StoryBoardServerScrolling.Stop(this); //---------- Not Working
//this.ServerView.Server1Static.Visibility = System.Windows.Visibility.Hidden;
//this.ServerView.Server2Static.Visibility = System.Windows.Visibility.Hidden;
//this.ServerView.Server3Scrolling.Visibility = System.Windows.Visibility.Hidden;
//this.ServerView.SearchingGlass.Visibility = System.Windows.Visibility.Hidden;
}
x:Key
呢? - H.B.