【发布时间】:2021-08-25 08:11:59
【问题描述】:
网上有很多关于此的问题,但在阅读了这些问题以及有关动画控制的 MS 文档后,我无法从 C# 代码中的 XAML 事件触发器中模仿情节提要控制。
在这个 XAML 文件中,我有一个正在旋转的画布。我想为旋转添加交互性,
<Window x:Class="GraphicsBook.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:k="clr-namespace:GraphicsBook;assembly=Testbed2D"
Title="2D Testbed"
KeyDown="KeyDownHandler"
Height="600"
Width="600" >
<DockPanel LastChildFill="True">
<StackPanel x:Name="stack" DockPanel.Dock ="Top" Orientation="Vertical" Background="#ECE9D8">
<Button Name="StartAnimationClick">Start animation</Button>
<Button Name="StopAnimationClick" Click="stopAnimationClick">Stop animation</Button>
<Canvas x:Name="Grid">
<Canvas.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="CanvasRotation" CenterX="300" CenterY="300" Angle="0"/>
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>
<StackPanel.Triggers>
<EventTrigger RoutedEvent="Button.Click" SourceName="StartAnimationClick">
<BeginStoryboard Name="GridRotationStoryboard">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="CanvasRotation"
Storyboard.TargetProperty="Angle"
From="0.0" To="360.0"
Duration="00:00:10.00" RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<!--<EventTrigger RoutedEvent="Button.Click" SourceName="StopAnimationClick">
<StopStoryboard BeginStoryboardName="GridRotationStoryboard"/>
</EventTrigger>-->
</StackPanel.Triggers>
</StackPanel>
</DockPanel>
</Window>
被注释的事件触发器,
<!--<EventTrigger RoutedEvent="Button.Click" SourceName="StopAnimationClick">
<StopStoryboard BeginStoryboardName="GridRotationStoryboard"/>
</EventTrigger>-->
确实按预期工作,也就是说,如果我单击按钮,动画就会停止。但是,上面的 XAML 版本尝试在 C# 中复制此功能,但这不起作用。点击处理程序如下所示,
private void stopAnimationClick(object sender, RoutedEventArgs e)
{
Debug.Print("Stop animation");
// ???
}
我无法控制??? 中的动画对象,无论我尝试什么技术来处理它。我一定是以某种方式错误地安装这些部件,但我看不出有什么问题。
【问题讨论】:
-
docs.microsoft.com/en-us/dotnet/desktop/wpf/graphics-multimedia/… 阅读顶部的解释。您可以尝试 GridRotationStoryboard.Stop(this) 但它可能不起作用。