从 C# 代码启动情节提要
本文关键字:动情 启动 代码 | 更新日期: 2023-09-27 18:30:37
我正在尝试从 C# 调用用 xaml 代码声明的故事板:
<Storyboard x:Key="BotRotation" Duration="00:00:4" RepeatBehavior="Forever" >
<DoubleAnimation BeginTime="0:0:0"
Storyboard.TargetName="imageRotateTransformm"
Storyboard.TargetProperty="ScaleX"
From="1" To="-1"
Duration="0:0:2"
/>
<DoubleAnimation
BeginTime="0:0:2"
Storyboard.TargetName="imageRotateTransformm"
Storyboard.TargetProperty="ScaleX"
From="-1" To="1"
Duration="0:0:2"
/>
</Storyboard>
</Window.Resources>
此情节提要应修改图像的 ScaleX 属性。图片声明:
<Image Name="uiRobotIcon" Height="64" Width="64" Source="/YoutubeTelegramAudio;component/imgs/ic_robot.png" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="1" ScaleX="1" x:Name="imageRotateTransformm" />
<SkewTransform AngleY="0" AngleX="0" />
<RotateTransform Angle="0" />
<TranslateTransform/>
</TransformGroup>
</Image.RenderTransform>
</Image>
然后,我想在单击另一个按钮时从 C# 启动此动画。谢谢。
这
很容易。只需找到Resource
,将其强制转换为Storyboard
,然后调用其Begin()
方法:
Storyboard sb = (<YourNamespace>.Properties.Resources["BotRotation"] as Storyboard);
sb.Begin();
将上面的代码放在某个事件处理程序中,它应该可以正常工作。
但:
在应用程序中声明情节提要的位置也很重要。如果它在 App.xaml
,那么不用担心,但在其他任何地方,它可能无法访问。但我认为Window.Resources
标签也可以包含可访问的资源。我现在无法测试它:)
我找到了解决方案。首先,我将故事板标签包含在 BeginStoryboard 中:
<Window.Resources>
<BeginStoryboard x:Key="BotRotation">
<Storyboard Duration="00:00:4" RepeatBehavior="Forever" >
<DoubleAnimation BeginTime="0:0:0"
Storyboard.TargetName="imageRotateTransformm"
Storyboard.TargetProperty="ScaleX"
From="1" To="-1"
Duration="0:0:2"
/>
<DoubleAnimation
BeginTime="0:0:2"
Storyboard.TargetName="imageRotateTransformm"
Storyboard.TargetProperty="ScaleX"
From="-1" To="1"
Duration="0:0:2"
/>
</Storyboard>
</BeginStoryboard>
</Window.Resources>
最后,我用下面的语句调用 C# 中的动画:
BeginStoryboard sb = this.FindResource("BotRotation") as BeginStoryboard;
sb.Storyboard.Begin();
您也可以在纯 xaml 中执行此操作,只需使用触发器操作:
<Button>
<Button.Triggers>
<EventTrigger RoutedEvent="PreviewMouseDown">
<BeginStoryboard Storyboard="{DynamicResource BotRotation}"/>
</EventTrigger>
</Button.Triggers>
</Button>
我在代码项目中找到了一个解决方案:https://www.codeproject.com/Articles/364529/Animation-using-Storyboards-in-WPF
首先添加标签:
<窗口资源>窗口资源>
现在,您可以创建情节提要:
<Storyboard x: Key = "yourSb">
<DoubleAnimation Storyboard.TargetName = "_ window"
Storyboard.TargetProperty = "Opacity" From = "1" To = "0.3"
Duration = "0: 0: 1" />
</Storyboard>
不要忘记在故事板标签的开头添加"x: key = "yourSb"。
在您的代码隐藏中:
Storyboard s = (Storyboard)TryFindResource("yourSb");
s.Begin();